我正在尝试在会话中更改身份验证令牌。
Scenerio是;
匿名用户到达主页并且AnonymousAuthenticationToken
已保存到与ROLE_ANONYMOUS
授予权限的会话。但是当他/她想要创建项目时,应用程序强制他/她登录。他使用他/她的openId帐户登录我正在创建一个OpenIDAuthenticationToken
ROLE_USER
授予权限,并用它替换存储的令牌。他/她可以ROLE_USER
访问允许的任何地方。
当他想要注销我正在从上下文中删除令牌时没关系。
BUT;
当他/她再次登录时,我可以观察到令牌在上下文中被替换,他/她无法访问ROLE_USER
个允许的部分。
登录前记录;
Current authentication is org.springframework.security.authentication.AnonymousAuthenticationToken@6fabe8e0: Principal: anonymousUser; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@fffe9938: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: B1F6870C9FF93DCB50A6FD71302A9090; Granted Authorities: ROLE_ANONYMOUS
登录后记录;
After refreshing authentication: [org.springframework.security.openid.OpenIDAuthenticationToken@c9e3a81c: Principal: Hugo Weaving; Credentials: [PROTECTED]; Authenticated: true; Details: org.springframework.security.web.authentication.WebAuthenticationDetails@fffe9938: RemoteIpAddress: 0:0:0:0:0:0:0:1; SessionId: B1F6870C9FF93DCB50A6FD71302A9090; Granted Authorities: ROLE_USER, attributes : null]
我暂时没有分配开放的id属性,但我认为这不是问题。
这是我的web.xml
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/security-context.xml
</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
这是我的security.xml
<http auto-config="true">
<intercept-url pattern="/first.jsp" access="ROLE_USER" />
<intercept-url pattern="/second.jsp" access="ROLE_USER" />
<openid-login login-page="/index.html"></openid-login>
</http>
**基本上我强迫想要访问first.jsp
和second.jsp
的客户使用他们的开放ID帐户登录。
答案 0 :(得分:-1)
最后我解决了。这个问题不是在auth令牌中,而是在我的工作流程中。更改了一行代码,就完成了。