我重启了我的服务器,它基本上清除了会话的所有内容。由于会话已被清除,因此用户无法再被视为已登录。(JSESSIONID cookie仍保留在浏览器中)
但是除非我从浏览器中删除JESSIONID cookie,否则spring不会重定向到登录。 我的问题是 - 为什么Spring安全性依赖于JESSIONID cookie而不是会话?
这是我的spring-security.xml配置 -
<security:global-method-security
secured-annotations="enabled" />
<security:http auto-config="true">
<!-- Restrict URLs based on role -->
<security:intercept-url pattern="/portal/login*"
access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:intercept-url pattern="/logoutSuccess*"
access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:intercept-url pattern="/**/*.css"
access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:intercept-url pattern="/**/*.js"
access="IS_AUTHENTICATED_ANONYMOUSLY" />
<security:intercept-url pattern="/portal/**"
access="ROLE_USER, ROLE_ADMIN" />
<security:form-login login-page="/portal/login.action"
login-processing-url="/portal/loginProcess" default-target-url="/portal/index"
authentication-failure-url="/portal/login.action?login_error=1" />
<security:logout logout-url="/portal/logout"
logout-success-url="/portal/login.action" />
</security:http>
<security:authentication-manager>
<security:authentication-provider>
<security:jdbc-user-service
data-source-ref="dataSource"
users-by-username-query="SELECT emailid AS username, password, IF(active = 'Y', true, false) AS enabled FROM users WHERE emailid = ?"
authorities-by-username-query="SELECT username, authority from authorities where username = ?" />
</security:authentication-provider>
</security:authentication-manager>
答案 0 :(得分:1)
我重启了我的服务器,它基本上清除了所有的内容 会议。由于会话已被清除,用户不能 更长的时间被认为是登录。
根据您的评论,在服务器重启应用程序的行为就好像用户已登录一样,我怀疑您启用了会话持久性(默认情况下在Tomcat / JBoss上启用),因此您实际登录(相同的JSESSIONID)。此外,您可能会丢失会话内容,因为您放入会话的对象不可序列化。
根据Tomcat文档(JBoss在这种情况下表现相似):
禁用会话持久性如上所述,每个Web应用程序 默认情况下已配置标准管理器实现,以及它 跨重启执行会话持久性。要禁用此功能 持久性功能,为您的Web创建一个Context配置文件 应用程序并在其中添加以下元素:
<Manager pathname="" />
答案 1 :(得分:0)
我的问题是 - 为什么Spring安全性依赖于JESSIONID cookie和 不在会议上
您必须启用基于Cookie的会话。如果您使用的是tomcat 7,那么您的web.xml中可能会有类似的内容
<session-config>
<!-- Disables URL-based sessions (no more 'jsessionid' in the URL using Tomcat) -->
<tracking-mode>COOKIE</tracking-mode>
</session-config>
将其删除。