gpt4 book ai didi

spring-security - Spring Security 多个注销网址?

转载 作者:行者123 更新时间:2023-12-05 04:15:37 26 4
gpt4 key购买 nike

我正在使用 Spring security java 配置,我想知道一种实现多个 url 注销的方法。即

logout().logoutRequestMatcher(new 
AntPathRequestMatcher("/invalidate")).logoutUrl("/logout");

在这段代码中,正常的注销 url“/logout”工作正常,它是一个发布请求,但我也希望用户注销 url“/invalidate”,这似乎不起作用。

最佳答案

根据Spring Security的教程,似乎下一个更优雅的做法:

enter image description here

在安全表单登录标签中添加如下内容:

<security:logout logout-url="/logout" success-handler-ref="logoutHandler"/>

每次您点击/logout URL 时,logoutHandler 都会被调用,您可以根据它决定在成功注销后的行为方式。

来自 Spring 文档:

enter image description here

您需要做的就是创建一个新类来实现图中标记的接口(interface)并实现其单一方法。

在该方法上决定在成功注销后如何操作。例如:

@Component("logoutHandler")
public class MyLogoutSuccessHandler implements LogoutSuccessHandler {

@Override
public void onLogoutSuccess(HttpServletRequest request,HttpServletResponse response, Authentication authentication) throws IOException, ServletException {

if(request.getParameter("msgShow") != null && request.getParameter("msgShow").equals("false")){
redirectResponse(request, response, "http://" + request.getServerName() + ":" + request.getServerPort() + "/my_web_app/home?logout=false");
}
else{
redirectResponse(request, response,"http://" + request.getServerName() + ":" + request.getServerPort() + "/my_web_app/home?logout=true");
}
}

private void redirectResponse(HttpServletRequest request, HttpServletResponse response, String destination) {
response.setStatus(HttpServletResponse.SC_MOVED_PERMANENTLY);
response.setHeader("Location", destination);
}
}

现在不要忘记向上面的注销处理程序添加一个 @Component 注释 + 在安全配置文件中添加接下来的 2 条语句:

<context:annotation-config />
<context:component-scan base-package="package.to.logout.handler" />

关于spring-security - Spring Security 多个注销网址?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31880662/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com