具有重定向到登录页面的AccessDeniedHandler
当(在Spring Security /
MVC中)对页面的访问被拒绝时,由于用户没有足够的特权(尽管他已通过身份验证),我需要通过显示登录页面来提供以其他用户身份登录(而不是标准行为)显示403拒绝访问页面)。
我可以编写一个AccessDeniedHandler
,将重定向到登录页面。但是,Spring
Security在发现其他用户登录后会如何反应?当新用户成功通过身份验证后,我可以以某种方式注销旧用户吗?
回答:
当已经有另一个用户登录时,我尝试登录一个新用户。它可以正常工作-无需注销第一个用户。他的授权被新的授权所代替。这是对我自己问题的简单答案。
如果有人感兴趣,在访问被拒绝的情况下如何转发登录页面-这是我的解决方案:
首先定义一个自定义的RequestCache:
@Component("myRequestCache")public class MyRequestCache extends HttpSessionRequestCache {
public MyRequestCache() {
super();
}
}
第二个定义自定义AccessDeniedHandler:
@Component("myAccessDeniedHandler")public class MyAccessDeniedHandler implements AccessDeniedHandler {
@Autowired
@Qualifier("myRequestCache")
private RequestCache myRequestCache;
public MyAccessDeniedHandler() {
}
@Override
public void handle(HttpServletRequest request, HttpServletResponse response, AccessDeniedException exc)
throws IOException, ServletException {
if (!response.isCommitted()) {
//Save Target-Request
shopRequestCache.saveRequest(request, response);
//Forward to the login page
request.getRequestDispatcher("/loginPage").forward(request, response);
}
}
}
第三,将这两个配置为Spring Security:
@Configuration@EnableWebSecurity
public class myConfig extends WebSecurityConfigurerAdapter {
@Autowired
@Qualifier("myRequestCache")
RequestCache myRequestCache;
@Autowired
@Qualifier("myAccessDeniedHandler")
AccessDeniedHandler myAccessDeniedHandler;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.requestCache()
.requestCache(myRequestCache)
.and()
.exceptionHandling()
.accessDeniedHandler(myAccessDeniedHandler)
}
}
这是怎么回事
如果是,则MyAccessDeniedHandler
转发AccessDeniedException
到登录页面。由于此前进是由此自编程类而非过滤链中的Spring调用的,因此我们必须告诉spring目标请求是什么-
成功身份验证后目标重定向到的位置。这是通过RequestCache
。
以上是 具有重定向到登录页面的AccessDeniedHandler 的全部内容, 来源链接: utcz.com/qa/426665.html