具有重定向到登录页面的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

回到顶部