Spring安全性:如何设置与上下文路径不同的Memberme cookie url路径?
如何在Spring Security中设置与上下文路径不同的Memberme cookie url路径 假设我的网站的主页url为(url重写): 我的登录页面有如下url:Spring安全性:如何设置与上下文路径不同的Memberme cookie url路径?,spring,cookies,spring-security,Spring,Cookies,Spring Security,如何在Spring Security中设置与上下文路径不同的Memberme cookie url路径 假设我的网站的主页url为(url重写): 我的登录页面有如下url: https://www.mysuperspecialdomain.com/shop/account/login 成功登录后,Memberme cookie具有路径/shop(在浏览器中可见,例如Chrome)。这是项目的上下文路径 这导致了这样一种情况,当我进入我的主页时,Memberme没有登录。只有当我导航到url时
https://www.mysuperspecialdomain.com/shop/account/login
成功登录后,Memberme cookie具有路径/shop
(在浏览器中可见,例如Chrome)。这是项目的上下文路径
这导致了这样一种情况,当我进入我的主页时,Memberme没有登录。只有当我导航到url时,它才以
https://www.myspecialdomain.com/shop
它正在运行。如果您使用Spring Security 4.1.0或更高版本,您可以配置cookie域,请参阅:
“记住我”cookie可见的域名
但你不能改变现状
因此,您必须实现自己的(您可以创建现有的子类)并将其添加到您的安全配置中。我找到了一个解决我自己问题的方法-可以通过
HttpServletResponseWrapper
来操纵Memberme cookie的路径。这就是解决方案(基于此答案):
public class RememberMeCookieResponseWrapper extends HttpServletResponseWrapper {
public RememberMeCookieResponseWrapper(HttpServletResponse response) {
super(response);
}
@Override
public void addCookie(Cookie cookie) {
if (cookie.getName().equals("shop")) {
cookie.setPath("/");
}
super.addCookie(cookie);
}
}
public class RememberMeCookieFilter implements Filter {
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
if (response instanceof HttpServletResponse) {
HttpServletResponse newResponse =
new RememberMeCookieResponseWrapper((HttpServletResponse)response);
chain.doFilter(request, newResponse);
}
}
}
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(new RememberMeCookieFilter(), UsernamePasswordAuthenticationFilter.class)
...
非常感谢。你是对的。但与其实现一个新的
membermeservice
,我更愿意扩展现有的类似tokenbasedrembermeservices
。这是描述的。我最担心的是:一旦我要使用新的Spring版本,我就必须检查setCookie
方法是否已经像我的扩展版本那样实现了。Spring应该提供一个选项来配置这个…我已经找到了一个解决我自己问题的方法:。优点是,您不必更改Spring RemembermService实现。
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Override
protected void configure(HttpSecurity http) throws Exception {
http.addFilterBefore(new RememberMeCookieFilter(), UsernamePasswordAuthenticationFilter.class)
...