Роли безопасности Spring - PullRequest
0 голосов
/ 23 марта 2012

У меня есть таблицы ролей пользователей в моей базе данных, которая содержит такие роли, как 'ROLE_ADMIN' и 'ROLE_USER', а в applicationContext-security.xml я определил filterSecurityInterceptor:

  <bean id="filterSecurityInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
    <property name="authenticationManager" ref="authenticationManager" />
    <property name="accessDecisionManager" ref="accessDecisionManager" />
    <property name="objectDefinitionSource">
      <s:filter-invocation-definition-source>
        <s:intercept-url pattern="/rpc/userService" access="IS_AUTHENTICATED_ANONYMOUSLY" />
        <s:intercept-url pattern="/rpc/adminService**" access="IS_AUTHENTICATED_ANONYMOUSLY"/>
        <s:intercept-url pattern="/**" access="IS_AUTHENTICATED_ANONYMOUSLY" />
      </s:filter-invocation-definition-source>
    </property>
  </bean>

  <bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager">
    <property name="sessionController" ref="concurrentSessionController" />
    <property name="providers">
      <list>
        <ref bean="rememberMeAuthenticationProvider" />
        <ref bean="daoAuthenticationProvider" />
      </list>
    </property>
  </bean>

 <bean id="daoAuthenticationProvider" class="org.springframework.security.providers.dao.DaoAuthenticationProvider">
    <property name="userDetailsService" ref="accountRepository" />
    <property name="passwordEncoder" ref="passwordEncoder" />
  </bean>

Однако, когда я попытался получить доступ к какому-либо администратору какому-либо ресурсу, он был отклонен, и на него были выданы следующие претензии:базы данных для роли, которая распознается securityContext?

Ответы [ 2 ]

1 голос
/ 24 марта 2012

У вас нет HttpSessionContextIntegrationFilter в вашей цепочке фильтров для /rpc/adminService. Вы не сказали, что такое URL-адрес запроса, когда видите проблему, но если вы обратитесь к этому точному URL-адресу, для запроса не будет предоставлен контекст безопасности.

Цепи фильтра Spring Security должны всегда включать этот фильтр.

Я бы тоже остерегался твоего

<s:filter-chain pattern="/**" filters="none" />

, поскольку все, что не соответствует предыдущим шаблонам, не будет иметь контекст безопасности.

0 голосов
/ 24 марта 2012

У вас это есть в вашей конфигурации?* Я использую это для простого тестирования:

<authentication-manager alias="authenticationManager" >
    <authentication-provider>
            <jdbc-user-service data-source-ref="dataSource"
                users-by-username-query =
                    "SELECT username, password, CASE Status WHEN 1 THEN 'true' ELSE 'false' END as enabled
                        FROM User
                        WHERE username = ?"
                authorities-by-username-query=
                    "SELECT username, CASE role WHEN 1 THEN 'ROLE_USER' WHEN 2 THEN 'ROLE_ADMIN' ELSE 'ROLE_GUEST' END as authorities
                        FROM User
                        WHERE username = ?" />       
        </authentication-provider>
</authentication-manager>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...