以下情况:
我用Spring开发了一个微服务架构。因此,我已经实现了一项身份验证服务和一项用户界面服务。 会话与redis共享。因此,工作流程是您登录auth-login页面,成功后将重定向到ui资源。 到目前为止,一切都很好。我还通过用户角色实现了自动化,以确保我在控制器级别上的资源安全。
我想要的东西: 即使登录成功,也应该无法更改URL并输入限制区域。因此,当客户端尝试执行此操作时,会引发atm发生Accessdenied异常。 在那种情况下,我想使会话无效并重定向到auth服务的登录页面。
我做什么: 我遵循baeldung的this教程来实现自定义accessdeniedhandler。
代码:
CustomAccessDeniedHandler.java
public class CustomAccessDeniedHandler implements AccessDeniedHandler {
@Override
public void handle(HttpServletRequest request, HttpServletResponse response,
AccessDeniedException accessDeniedException) throws IOException, ServletException {
response.sendRedirect("http://localhost:8000/login");
}
}
SpringSecurity.java
@Configuration
public class SpringSecurityConfiguration extends WebSecurityConfigurerAdapter{
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().anyRequest().authenticated();
http.exceptionHandling().accessDeniedHandler(accessDeniedHandler());
}
@Bean
public AccessDeniedHandler accessDeniedHandler(){
return new CustomAccessDeniedHandler();
}
}
会发生什么: 我在处理程序中设置了一个断点,但未抛出该断点,并且抛出了一般的accessdenied消息。在执行过程中我忘记注册了吗?
谢谢你们