【问题标题】:Spring security: j_spring_security_check page not foundSpring 安全性:找不到 j_spring_security_check 页面
【发布时间】:2015-10-09 23:23:49
【问题描述】:

我正在尝试使用 Spring Security,但是当我使用表单登录(有或没有正确的用户名/密码)时,我收到 404 错误:http://localhost/HomeAutomation/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>

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

对不起我的英语。 提前谢谢你。

【问题讨论】:

    标签: java spring spring-mvc spring-security


    【解决方案1】:

    Spring Security 的 Java 配置默认使用与 XML 配置不同的 URL。这意味着既然你指定了:

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

    Spring Security 将使用 GET /index 重定向来请求您的登录页面(与您的 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")  
    

    补充说明

    【讨论】:

    • 不确定为什么不被接受,这是正确的答案。我没有意识到您在提交时需要使用与 POST 相同的 url。谢谢!
    猜你喜欢
    • 2015-02-12
    • 2021-09-06
    • 1970-01-01
    • 2017-05-15
    • 2014-04-14
    • 1970-01-01
    • 1970-01-01
    • 2015-01-16
    • 1970-01-01
    相关资源
    最近更新 更多