samedi 11 avril 2015

HTTP Status 405 - Request method 'POST' not supported error when try to submit login form

I am using spring, spring security. My application have custom login page a jsp page where I am trying to post username, password and in backend I have a controller to capture and authenticate login details. I am using tomcat. Getting the following error when I submit login form.

HTTP Status 405 - Request method 'POST' not supported


BetaAccessController.java



@RequestMapping(value= "/beta/login", method = RequestMethod.GET)
public ModelAndView registerPage(@ModelAttribute("beta_access") BetaAccess beta_access, Model model, BindingResult result) {
String accesscode = beta_access.getAccesscode();
ModelAndView mav = new ModelAndView("index");

mav.addObject("user", new User());
mav.addObject("temporary_user", new TemporaryUser());

return mav;
}


index.jsp



<div class="login">
<form:form modelAttribute="user" id="loginForm" name="loginForm" method="post" action="login">
<ul>
<li>
<img style="display: none;" src="/images/ajax-loader.gif" id="loading-image-2" alt="Loading..." />
</li>
<li>
<form:input path="emailAddress" type="email" id="emailAddress" name="emailAddress" class="input" placeholder="Enter your email address" />
<form:errors path="emailAddress" cssClass="error" id="emailPassError"/>
</li>
<li>
<form:input path="password" id="userPassword" name="password" type="password" class="input" placeholder="Enter your password" />
<h3><a id="sd" href="/user/forgetpassword">forget password?</a></h3>
</li>
</ul>
<input type="submit" value="l" style="width:0px;display:none" id="lreal">
</form:form>
</div>


LoginController.java



@Controller
public class LoginController {

@Autowired
@Qualifier("authenticationManager")
AuthenticationManager authenticationManager;

@Autowired
SecurityContextRepository repository;

@Autowired
RememberMeServices rememberMeServices;

@Autowired
APIService apiService;

@Autowired
SessionInfoService sessionInfoService;

@RequestMapping(value= "/login", method = RequestMethod.POST)
public ModelAndView login(@Valid @ModelAttribute("user") User user, Model model, BindingResult result, HttpServletRequest request, HttpServletResponse response) {

UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user.getEmailAddress(), user.getPassword());

try {
Authentication auth = authenticationManager.authenticate(token);

SecurityContextHolder.getContext().setAuthentication(auth);
repository.saveContext(SecurityContextHolder.getContext(), request,
response);
rememberMeServices.loginSuccess(request, response, auth);

String sessionId = apiService.p2logicApiLogin(user.getEmailAddress(), user.getPassword());

SessionInfo sessionInfo = new SessionInfo(user.getEmailAddress(), sessionId, new Date());

sessionInfoService.addSessionInfo(sessionInfo);

return new ModelAndView("redirect:/user/dashboard");
} catch (BadCredentialsException ex) {
//If the password and confirm password don't match
result.rejectValue("emailAddress", "error.user", "Please check your password or email!");

//Send user info back to page
model.addAttribute("temporary_user", new TemporaryUser());
model.addAttribute("user", user);

return new ModelAndView("index");
} catch (DisabledException ex){
//If the password and confirm password don't match
result.rejectValue("emailAddress", "error.user", "Your account is frozen!");

//Send user info back to page
model.addAttribute("temporary_user", new TemporaryUser());
model.addAttribute("user", user);

return new ModelAndView("index");
}
}
}


web.xml



<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://ift.tt/ra1lAU" xmlns="http://ift.tt/nSRXKP" xsi:schemaLocation="http://ift.tt/nSRXKP http://ift.tt/LU8AHS" version="2.5">
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/applicationContext.xml
/WEB-INF/spring-security.xml
</param-value>
</context-param>

<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>

<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>

<filter>
<filter-name>hibernateFilter</filter-name>
<filter-class>org.springframework.orm.hibernate4.support.OpenSessionInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>hibernateFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.security.web.session.HttpSessionEventPublisher</listener-class>
</listener>

<filter>
<filter-name>LocaleFilter</filter-name>
<filter-class>com.p2logic.config.LocaleUrlFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LocaleFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>

<session-config>
<session-timeout>15</session-timeout>
</session-config>

<error-page>
<!-- Define error page to react on Java exception -->
<exception-type>java.lang.Throwable</exception-type>
<!-- The location of the resource to display in response to the error will point to the Spring MVC handler method -->
<location>/error</location>
</error-page>

<error-page>
<error-code>404</error-code>
<location>/error</location>
</error-page>

</web-app>


applicationContext.xml



<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://ift.tt/GArMu6" xmlns:xsi="http://ift.tt/ra1lAU"
xmlns:mvc="http://ift.tt/1bHqwjR" xmlns:beans="http://ift.tt/GArMu6"
xmlns:context="http://ift.tt/GArMu7" xmlns:tx="http://ift.tt/OGfeU2"
xsi:schemaLocation="http://ift.tt/1bHqwjR http://ift.tt/JWpJWM
http://ift.tt/GArMu6 http://ift.tt/1jdM0fG
http://ift.tt/OGfeU2 http://ift.tt/1cKeJ93
http://ift.tt/GArMu7 http://ift.tt/1bGeTcI">

<!-- Enable @Controller annotation support -->
<mvc:annotation-driven />

<context:annotation-config/>

<bean class="org.springframework.web.servlet.view.InternalResourceViewResolver">
<property name="viewClass" value="org.springframework.web.servlet.view.JstlView" />
<property name="prefix" value="/jsp/" />
<property name="suffix" value=".jsp" />
</bean>

<bean id="viewResolver1" class="org.springframework.web.servlet.view.ResourceBundleViewResolver">
<property name="order" value="1"/>
<property name="basename" value="views"/>
</bean>

<!-- Scan classpath for annotations (eg: @Service, @Repository etc) -->
<context:component-scan base-package="com.p2logic"/>

<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close">
<property name="driverClassName" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/p2logic_data"/>
<property name="username" value="root"/>
<property name="password" value=" "/>
<property name="validationQuery" value="SELECT 1"/>
</bean>

<!-- Hibernate Session Factory -->
<bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
<property name="dataSource" ref="dataSource"/>
<property name="configLocation">
<value>classpath:hibernate.cfg.xml</value>
</property>
<property name="packagesToScan">
<array>
<value>com.p2logic</value>
</array>
</property>
<property name="hibernateProperties">
<value>
hibernate.dialect=org.hibernate.dialect.MySQLDialect
</value>
</property>
</bean>

<!-- Hibernate Transaction Manager -->
<bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager">
<property name="sessionFactory" ref="sessionFactory"/>
</bean>

<!-- Activates annotation based transaction management -->
<tx:annotation-driven transaction-manager="transactionManager"/>

<!-- Back to previous URL after logging out -->
<bean id="logoutSuccessHandler"
class=" com.p2logic.session.CustomLogoutHandler" >
</bean>

<!-- Configure the multipart resolver -->
<bean id="multipartResolver"
class="org.springframework.web.multipart.commons.CommonsMultipartResolver">
</bean>

<!-- locale Resolver configuration-->
<bean id="localeResolver" class="com.p2logic.config.CustomLocaleResolver"></bean>


<context:property-placeholder location="classpath:api.properties" order="1" ignore-unresolvable="true"/>
<context:property-placeholder location="classpath:ftp.properties" order="2" ignore-unresolvable="true"/>
<context:property-placeholder location="classpath:email.properties" order="3" ignore-unresolvable="true"/>

<bean id="passwordEncoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>

<bean id="webexpressionHandler" class="org.springframework.security.web.access.expression.DefaultWebSecurityExpressionHandler" />

<bean id="authoritiesAction" class="com.p2logic.util.AuthoritiesActionImpl" />

<bean id="fileActions" class="com.p2logic.util.FileActionsImpl" />

<bean id="emailAction" class="com.p2logic.util.EmailActionImpl" />

<bean id="companyAction" class="com.p2logic.util.CompanyActionImpl" />

<bean id="proposalAction" class="com.p2logic.util.ProposalActionImpl" />

<bean id="prospectAction" class="com.p2logic.util.ProspectActionImpl" />

<bean id="workorderAction" class="com.p2logic.util.WorkOrderActionImpl" />

<bean id="summaryAction" class="com.p2logic.util.SummaryActionImpl" />

<bean id="projectAction" class="com.p2logic.util.ProjectActionImpl" />

<bean id="invoiceAction" class="com.p2logic.util.InvoiceActionImpl" />

<bean id="extraworkAction" class="com.p2logic.util.ExtraWorkActionImpl" />

<bean id="payrollAction" class="com.p2logic.util.PayrollActionImpl" />

<bean id="registrationAction" class="com.p2logic.util.RegistrationActionImpl" />

<bean id="importProspectAction" class="com.p2logic.util.ImportProspectActionImpl" />

<bean id="generalInformationAction" class="com.p2logic.util.GeneralInformationActionImpl" />

<bean id="pluginAction" class="com.p2logic.util.PluginActionImpl" />

<bean id="restTemplate" class="org.springframework.web.client.RestTemplate"/>

<bean id="restTemplateConfig" class="com.p2logic.config.RestTemplateConfig" />
</beans>


spring-security.xml



<?xml version="1.0" encoding="UTF-8"?>
<beans:beans xmlns="http://ift.tt/1c8inpe"
xmlns:beans="http://ift.tt/GArMu6"
xmlns:xsi="http://ift.tt/ra1lAU"
xsi:schemaLocation="http://ift.tt/GArMu6
http://ift.tt/18sW2ax
http://ift.tt/1c8inpe
http://ift.tt/1epvZ6L">

<http pattern="/resources/**" security="none" />

<http auto-config="true" use-expressions="true">

<form-login
always-use-default-target="true"
login-page="/beta/login"
default-target-url="/user/dashboard"
authentication-failure-url="/"
username-parameter="username"
password-parameter="password"
/>


<intercept-url pattern="/user/dashboard/**" access="hasRole('ROLE_USER')" />

<access-denied-handler error-page="/user/dashboard"/>

<logout invalidate-session="true"
logout-url="/user/logout"
delete-cookies="JSESSIONID"
success-handler-ref="logoutSuccessHandler"/>

<remember-me key="uniqueAndSecret"/>

<session-management>
<concurrency-control max-sessions="1" expired-url="/"/>
</session-management>

<session-management invalid-session-url="/" />

</http>

<authentication-manager alias="authenticationManager">
<authentication-provider>
<jdbc-user-service data-source-ref="dataSource"
users-by-username-query="
select email_address,password, enabled
from user where email_address=?"

authorities-by-username-query="
select u.email_address, ur.authority from user u, authorities ur
where u.user_id = ur.user_id and u.email_address =? "
/>

<password-encoder ref="passwordEncoder"/>
</authentication-provider>
</authentication-manager>

</beans:beans>

Aucun commentaire:

Enregistrer un commentaire