我正在使用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();
}
此代码对/**
网址进行身份验证有什么问题?
答案 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
和/
以外的未经身份验证的用户均可访问所有页面。