SpringSecurity 本地主机重定向太多次

问题描述 投票:0回答:1

我正在研究Spring Security。我正在从登录页面进行授权和身份验证,但我总是收到错误:

“本地主机重定向您太多次。”

我尝试清除浏览器中的缓存和 Cookie,但仍然遇到相同的错误。

这是我的安全配置

`@Bean
public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {
http
.authorizeRequests(auth -\> auth
.requestMatchers("/admin/**").hasRole("ADMIN")
.requestMatchers("/user/**").hasRole("USER")
.requestMatchers("/admin/login").permitAll()
.anyRequest().authenticated()
)
.formLogin(login -\> login
.loginPage("/admin/login")
.successHandler(new AuthenticationHandler())
.permitAll()
)
.logout(logout -\> logout
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logout")
.permitAll()
);
return http.build();
}`

和我的成功管理者

public class AuthenticationHandler implements AuthenticationSuccessHandler {

    @Override
    public void onAuthenticationSuccess(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
        // GET ROLE
        String role = authentication.getAuthorities().iterator().next().getAuthority();
    
        if (role.equals("ROLE_ADMIN")) {
            httpServletResponse.sendRedirect("/admin/home");
        }
        else if (role.equals("ROLE_USER")) {
            httpServletResponse.sendRedirect("/public/home");
        }
        else {
            httpServletResponse.sendRedirect("/login?error=true");
        }
    }

}
java spring-security
1个回答
0
投票

我认为您没有达到用户/管理员角色,并且您的重定向似乎不正确。如果您拥有除 USER/ADMIN 之外的任何角色,您将重定向到 /login (这需要对用户进行身份验证)而不是 /admin/login,这似乎会导致无限的重定向循环。

您可能应该将登录页面更改为 /login 而不是 /admin/login,因为在您的代码中,简单的非管理员用户也可以登录,从而使 /admin/login '错误'。

© www.soinside.com 2019 - 2024. All rights reserved.