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