我能在Spring Security中进行身份验证吗?

时间:2016-09-19 18:33:04

标签: java spring-security

我正在使用Spring Security根据角色对用户进行身份验证。 /**的身份验证正在给出:

  

页面加载失败,错误:HTTP重定向过多

错误和登录页面未显示。

  protected void configure(HttpSecurity http) throws Exception {
            http.authorizeRequests()
            .antMatchers("/login*").authenticated()
            .antMatchers("/**").authenticated()
            .and()
            .formLogin().loginPage("/login").failureUrl("/login?error").defaultSuccessUrl("/welcome")
            .usernameParameter("username").passwordParameter("password")
            .and()
            .logout().logoutSuccessUrl("/login?logout").logoutUrl("/login?logout")
            .and()
            .exceptionHandling().accessDeniedPage("/accessDenied")
            .and()
            .csrf();
        }

但如果我喜欢这样:

protected void configure(HttpSecurity http) throws Exception {
        http.authorizeRequests()
        .antMatchers("/login").authenticated()
        .antMatchers("/").authenticated()
        .and()
        .formLogin().loginPage("/login").failureUrl("/login?error").defaultSuccessUrl("/welcome")
        .usernameParameter("username").passwordParameter("password")
        .and()
        .logout().logoutSuccessUrl("/login?logout").logoutUrl("/login?logout")
        .and()
        .exceptionHandling().accessDeniedPage("/accessDenied")
        .and()
        .csrf();
    }

此代码对/**网址进行身份验证有什么问题?

1 个答案:

答案 0 :(得分:1)

未经身份验证的用户无法访问您的登录页面:

.antMatchers("/login*").authenticated()

所以Spring Security会重定向到您的登录页面,该页面会重定向到您的登录页面......

您必须允许未经身份验证的用户获取您的登录页面,请参阅Spring Security Reference

  

虽然自动生成的登录页面便于快速启动和运行,但大多数应用程序都希望提供自己的登录页面。为此,我们可以更新我们的配置,如下所示:

protected void configure(HttpSecurity http) throws Exception {
  http
      .authorizeRequests()
          .anyRequest().authenticated()
          .and()
      .formLogin()
          .loginPage("/login") 1
          .permitAll();        2
}
     

1更新的配置指定了登录页面的位置。

     

2我们必须授予所有用户(即未经身份验证的用户)访问我们的登录页面的权限。 formLogin().permitAll()方法允许为与基于表单的登录相关联的所有URL授予对所有用户的访问权限。

如果您删除通配符(*),则除login/以外的未经身份验证的用户均可访问所有页面。