2015-07-20 103 views
0

我试图使用Spring Security,但是当我使用表单登录(有或没有正确的用户名/密码)时,我得到一个404错误:http://localhost/HomeAutomation/j_spring_security_checkSpring安全:j_spring_security_check页面未找到

这里我的文件:

SecurityConfig.java:

@Configuration 
@EnableWebMvcSecurity 
public class SecurityConfig extends WebSecurityConfigurerAdapter{ 

    @Autowired 
    public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception { 
     auth.inMemoryAuthentication().withUser("greg").password("123").roles("USER"); 
    } 

    @Override 
    protected void configure(HttpSecurity http) throws Exception {  
     http.authorizeRequests() 
      .antMatchers("/home/**").access("hasRole('ROLE_USER')") 
      .and() 
       .formLogin().permitAll().loginPage("/index").failureUrl("/index?loginError=1") 
       .defaultSuccessUrl("/home", true).successHandler(new LoginSuccessHandler()) 
       .usernameParameter("username").passwordParameter("password")   
      .and() 
       .logout().logoutSuccessUrl("/index?logout=1") 
      .and() 
       .csrf(); 
    } 
} 

SpringMvcInitializer.java

public class SpringMvcInitializer extends AbstractAnnotationConfigDispatcherServletInitializer { 

    @Override 
    protected Class<?>[] getRootConfigClasses() { 
     return new Class[] { AppConfig.class }; 
    } 

    @Override 
    protected Class<?>[] getServletConfigClasses() { 
     return null; 
    } 

    @Override 
    protected String[] getServletMappings() { 
     return new String[] { "/" }; 
    } 
} 

SpringSecurityInitializer.java

public class SpringSecurityInitializer extends AbstractSecurityWebApplicationInitializer{ 
    //nothing to do 
} 

的index.jsp:

<c:if test="${not empty loginError}"> 
     <div class="errorMsg">${loginError}</div> 
    </c:if> 

    <form name='loginForm' action="<c:url value='j_spring_security_check' />" method='post'>...</form> 

你知道为什么这不起作用吗?

对不起,我的英语。 预先感谢您。

回答

1

Spring Security的Java配置默认为不同的XML配置。这意味着你已经指定了:

http 
    .formLogin() 
     .permitAll() 
     .loginPage("/index") 
     .failureUrl("/index?loginError=1") 
     .defaultSuccessUrl("/home", true) 
     .successHandler(new LoginSuccessHandler()) 
     .usernameParameter("username") 
     .passwordParameter("password") 

Spring Security将使用GET /索引重定向来请求登录页面(与loginPage属性的值相同)。 Spring Security将监视POST/index以获取要提交的用户名和密码(在HTTP参数用户名和密码上)。

如果你想改变这一点,你可以使用:

http 
    .formLogin() 

     // MODIFY HERE 
     .loginProcessingUrl("/j_spring_security_check") 

     .permitAll() 
     .loginPage("/index") 
     .failureUrl("/index?loginError=1") 
     .defaultSuccessUrl("/home", true) 
     .successHandler(new LoginSuccessHandler()) 
     .usernameParameter("username") 
     .passwordParameter("password") 

其他注意事项

+0

不确定为什么这不被接受,这是正确的答案。我没有意识到在提交时需要使用与POST相同的URL。 Thnks! –