Я пытаюсь изменить токен авторизации в сеансе.
Scenerio is;
Пользователь-анонимный пользователь достигает главной страницы и AnonymousAuthenticationToken
сохраняется в сеансе с ROLE_ANONYMOUS
предоставленными полномочиями. Но когда он / она хочет создать элемент, приложение заставляет его / ее войти в систему. После того как он входит в систему с помощью его / ее учетная запись openId Я создаю OpenIDAuthenticationToken
с ROLE_USER
предоставленными полномочиями и заменяю им сохраненный токен. Он / она может получить доступ с помощью ROLE_USER
в любое место, где это разрешено.
Когда он хочет выйти из системы, я удаляю токен из контекста, и это нормально.
НО;
Когда он / она снова входит в систему, я вижу, что токены заменяются в контексте, он / она не может получить доступ к 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]
На данный момент я не назначил атрибуты открытого идентификатора, но я не думаю, что это проблема.
Вот мой 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
, войти в систему с открытыми учетными записями.