Как / где я могу управлять Аутентификацией в SecurityContext в Сценарии предварительной аутентификации - PullRequest
0 голосов
/ 20 марта 2011

Интересно, как / где я могу управлять Аутентификацией в SecurityContext в Сценарии предварительной аутентификации.

Я использую Spring Security 2.x для реализации сценария предварительной аутентификации в моем проекте. теперь это работает патио.

После входа пользователя с помощью процесса предварительной аутентификации они могут быть авторизованы с соответствующими ролями и могут получать доступ к ресурсам, определенным в безопасности: filter.

, например

<security:filter-invocation-definition-source lowercase-comparisons="true" path-type="ant">
      <security:intercept-url pattern="/resource/**" access="ROLE_ADMIN" />

В каком-то контроллере я хочу проверить участника в контенте безопасности.

public abstract class AbstractUserAuthenticationController extends AbstractController
{
    protected boolean isAuthenticated(String userName)
    {   
        Object obj = SecurityContextHolder.getContext().getAuthentication().getPrincipal(); // where issue come up

Но SecurityContextHolder.getContext (). GetAuthentication () всегда возвращает ноль.

Кроме того, я также не могу использовать тег secuiry в jsp для проверки наличия у пользователя относительных ролей

<security:authorize ifNotGranted="ROLE_ADMIN">

 no role found

</security:authorize>

Ниже показан используемый мной «filterChainProxy».

    <bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
      <property name="filterInvocationDefinitionSource">
        <value>
          CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
          PATTERN_TYPE_APACHE_ANT 
          /*subscri*=httpSessionContextIntegrationFilter,logoutFilter,j2eePreAuthenticatedProcessingFilter,securityContextHolderAwareRequestFilter,subscribeExceptionTranslationFilter,filterInvocationInterceptor      
          /**=httpSessionContextIntegrationFilter,logoutFilter,j2eePreAuthenticatedProcessingFilter,logoutFilter,rememberMeProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor
        </value>
      </property>
    </bean>


 <bean id="preAuthenticatedAuthenticationProvider" class="org.springframework.security.providers.preauth.PreAuthenticatedAuthenticationProvider">
     <property name="preAuthenticatedUserDetailsService" ref="preAuthenticatedUserDetailsService" />
  </bean>

<bean id="preAuthenticatedUserDetailsService" class="demo.project.security.auth.RsaAuthenticationUserDetailsService" >
   <property name="userService" ref="userService" />
</bean>

<bean id="j2eePreAuthFilter" class="demo.project.security.filter.AutoLoginFilter">
  <property name="authenticationManager" ref="authenticationManager" /> 
  <property name="userService" ref="userService" />
</bean>

Я думаю, мне нужно где-то установить для Authentication SecurityContext, но я не знаю, где и где.

Чего мне не хватает? Кто-нибудь может дать мне некоторые подсказки?

Спасибо!

Ian

1 Ответ

0 голосов
/ 21 марта 2011

Вы должны использовать SecurityContextHolder.setContext метод для хранения вашего SecurityContext до его возвращения.

Самый простой способ сделать это - просто SecurityContextHolder.setContext(new SecurityContextImpl()).

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