Java 在spring security中用户注销时从会话中删除用户登录凭据

Java 在spring security中用户注销时从会话中删除用户登录凭据,java,spring,spring-mvc,spring-security,Java,Spring,Spring Mvc,Spring Security,我不熟悉Spring和Spring Security。我一直在看教程 不允许用户在未登录的情况下点击添加员工页面。因此,如果您点击添加员工页面,您将被引导到登录页面,当登录成功时,您将被自动引导到添加员工页面 但一旦用户登录,即使在用户注销后,也可以访问addemployee链接。即使在服务器重新启动后也可以访问它,我必须关闭浏览器窗口以销毁登录凭据 当我将注销url保留为我不想使用的“j_spring_security_logout”时,它可以正常工作。我想使用自定义域名和URL,可以吗 这

我不熟悉Spring和Spring Security。我一直在看教程

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

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

当我将注销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>

}

首先
当Spring提供了这么好的安全功能时,为什么要手动执行


毫无疑问,你可以自己处理。为此,当用户单击“注销”按钮或链接时,您必须使当前会话无效。有一种可用的方法可以解决您的问题。

首先
当Spring提供了这么好的安全功能时,您为什么要手动执行


毫无疑问,你可以自己处理。为此,当用户单击“注销”按钮或链接时,您必须使当前会话无效。有可用的方法
HttpSession#invalidate()
可以解决您的问题。

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

<logout logout-url="/logout" invalidate-session="true" delete-cookies="true" />
如果要更改用于指定用户名/密码的参数名称,请在
表单登录
元素上分别添加
用户名参数
密码参数

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


有关名称空间的解释,我建议您阅读。

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

<logout logout-url="/logout" invalidate-session="true" delete-cookies="true" />
如果要更改用于指定用户名/密码的参数名称,请在
表单登录
元素上分别添加
用户名参数
密码参数

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


对于名称空间的解释,我建议阅读。

我确实尝试从控制器中使会话无效,但没有效果。我没有改变任何安全功能,我只想使用自定义url和字段名。我相信应该有办法做到这一点。我只是想知道。@Hasif你还记得我在其他地方配置过吗?@VimalBera当我将注销url保持为“j_spring_security_logout”时,它会工作,但我想改用“logout”。你确定你的注销控制器被调用了吗?我尝试过从控制器中使会话无效,但没有效果。我没有改变任何安全功能,我只想使用自定义url和字段名。我相信应该有办法做到这一点。我只是想知道。@Hasif你还记得我在其他地方配置过吗?@VimalBera当我将注销url保持为“j_spring_security_logout”时,它会工作,但我想使用“logout”相反。是否确实调用了注销控制器?在配置中,您只指定了
注销成功url
,而没有指定
注销url
logout success url
是您在成功注销后发送到的url。@M.Deinum就是它。我忘了输入注销url。但是,有没有办法将用户名和密码的文本框名称从默认名称(如j_用户名和j_密码)更改为其他名称?如何在
表单登录
标签上指定
用户名参数
密码参数
。。。这些都在文档中解释过了!在您的配置中,您只指定了
注销成功url
,而没有指定
注销url
logout success url
是您在成功注销后发送到的url。@M.Deinum就是它。我忘了输入注销url。但是,有没有办法将用户名和密码的文本框名称从默认名称(如j_用户名和j_密码)更改为其他名称?如何在
表单登录
标签上指定
用户名参数
密码参数
。。。这些都在文档中解释过了!