gpt4 book ai didi

java - 当用户在 spring-security 中注销时从 session 中删除用户登录凭据

转载 作者:行者123 更新时间:2023-11-29 06:36:06 24 4
gpt4 key购买 nike

我是 Spring 和 Spring-Security 的新手。我一直在学习教程 here

不允许用户在未登录的情况下点击添加员工页面。因此,如果您点击添加员工页面,您将被定向到登录页面,当登录成功时,您将自动定向到添加员工页面。

但是一旦用户登录,即使在用户注销后也可以访问添加员工链接。即使在服务器重新启动后也可以访问它,我必须关闭浏览器窗 Eloquent 能销毁登录凭据。

当我将注销 URL 保留为我不想使用的“j_spring_security_logout”时,它工作正常。我想使用自定义字段名称和 url,这可能吗?

这是我的 spring-security.xml 的样子

<http auto-config="true" use-expressions="true">
<intercept-url pattern="/login" access="permitAll" />
<intercept-url pattern="/logout" access="permitAll" />
<intercept-url pattern="/accessdenied" access="permitAll" />
<intercept-url pattern="/**" access="hasRole('ROLE_USER')" />
<form-login login-page="/login" default-target-url="/list"
authentication-failure-url="/accessdenied" />
<logout logout-success-url="/logout" invalidate-session="true"
delete-cookies="true" />
</http>
<authentication-manager alias="authenticationManager">
<authentication-provider>
<user-service>
<user name="hasif" password="password" authorities="ROLE_USER" />
</user-service>
</authentication-provider>
</authentication-manager>

这是我的 LoginController 的样子

@Controller
public class LoginController {

@RequestMapping(value = "/login", method = RequestMethod.GET)
public String login() {
return "login";
}

@RequestMapping(value = "/logout", method = RequestMethod.GET)
public String logout(HttpServletRequest request) {
HttpSession session = request.getSession(false);
session.invalidate();
return "logout";
}

@RequestMapping(value = "/accessdenied", method = RequestMethod.GET)
public String accessdenied() {
return "accessdenied";
}
}

最佳答案

您的配置有误,您必须指定logout-url 属性而不是logout-success-url。后者是您在注销成功后发送到的 url。

<logout logout-url="/logout" invalidate-session="true" delete-cookies="true" />

delete-cookies 采用逗号分隔的字符串,其中包含要删除的 cookie 的名称,我怀疑您是否有一个名为 true 的 cookie,并且默认情况下 session 无效。所以基本上下面给出了相同的结果。

<logout logout-url="/logout" />

如果要更改用于指定用户名/密码的参数的名称,请在 上分别添加 username-parameterpassword-parameter表单登录元素。

<form-login login-page="/login" default-target-url="/list" authentication-failure-url="/accessdenied" username-parameter="my-username-param" password-parameter="my-password-param"/>

关于 namespace 的解释,我建议阅读 the reference guide .

关于java - 当用户在 spring-security 中注销时从 session 中删除用户登录凭据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20396544/

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