Изменение предоставленной роли аутентифицированного пользователя и токена аутентификации в Spring-Security - PullRequest
1 голос
/ 03 мая 2011

Я пытаюсь изменить токен авторизации в сеансе.

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, войти в систему с открытыми учетными записями.

1 Ответ

0 голосов
/ 12 июля 2011

Наконец я решил это. Эта проблема не была в токенах аутентификации, это было в моем рабочем процессе. Изменен однострочный код, и все готово.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...