我有一个使用安全性的Sping Boot 应用程序。这个应用程序使用MVC来显示一些页面,也使用一些REST接口来更新/获取对象。
现在,我在没有登录的情况下发出的每一个请求,我都会被重定向到**/login**页面。
当我尝试从Web浏览器访问时,这是按预期工作的。但我希望当我尝试从页面访问某些特定路径时,应用程序的React不同,例如“/api/customers”。
如果我尝试访问该路径,我希望删除HTTP 403错误,而不是重定向到登录页面。
这是我的安全配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.headers()
.referrerPolicy(ReferrerPolicyHeaderWriter.ReferrerPolicy.SAME_ORIGIN);
http.authorizeRequests()
.antMatchers("/js/**", "/img/**")
.permitAll()
.antMatchers("/**").authenticated()
.and()
.csrf().disable()
.formLogin()
.loginPage("/login")
.usernameParameter("email")
.passwordParameter("password")
.and()
.logout()
.logoutUrl("/logout")
.logoutSuccessUrl("/login?logged-out")
.and()
.exceptionHandling()
.accessDeniedPage("/access-denied")
;
}
这可能吗?
2条答案
按热度按时间8hhllhi21#
您可以创建自定义的AuthenticationEntryPoint:
https://docs.spring.io/spring-security/site/docs/4.0.4.RELEASE/reference/htmlsingle/#auth-entry-point
如果使用者要求安全的HTTP资源,但未进行验证,就会呼叫AuthenticationEntryPoint。安全性拦截程式会在堆栈回退的更下层掷回适当的AuthenticationException或AccessDeniedException,触发进入点上的commend方法。这会将适当的回应呈现给使用者,让验证可以开始。
并将其注册到框架中:
kmynzznz2#
Spring Security有一个
DelegatingAuthenticationEntryPoint
,它允许基于RequestMatcher
评估来选择具体的AuthenticationEntryPoint
。https://docs.spring.io/spring-security/site/docs/5.7.x/api/org/springframework/security/web/authentication/DelegatingAuthenticationEntryPoint.html