2013-02-27 2 views
0

В моей весенней безопасности У меня проблема. Когда я обращаюсь к url ​​как/admin,/client или even /admin/addUser.jsp, он возвращает меня на страницу входа (по мере необходимости), но когда я обращаюсь к url ​​like/addUser (который сопоставлен с контроллером Spring MVC), он возвращает меня страницу в любом случае, даже если пользователь не аутентифицирован. Какую конфигурацию мне нужно добавить/удалить/изменить, чтобы Security выполняла все хорошо.Решение о проверке подлинности Spring Security

<beans xmlns="http://www.springframework.org/schema/beans" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xmlns:security="http://www.springframework.org/schema/security" 
     xsi:schemaLocation="http://www.springframework.org/schema/beans 
      http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
     http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd"> 

     <security:http auto-config="true" use-expressions="true"> <!--access-decision-manager-ref="accessDecisionManager"--> 
      <security:intercept-url pattern="/login" access="permitAll"/> 
      <security:intercept-url pattern="/admin*/**" access="hasRole('ROLE_ADMIN')"/> 
      <security:intercept-url pattern="/client*/**" access="hasRole('ROLE_USER')"/> 
      <security:form-login login-page="/login" default-target-url="/index" authentication-failure-url="/loginFail" 
           authentication-success-handler-ref="redirectRoleStrategy"/> 
      <security:logout logout-success-url="/logout" invalidate-session="true"/> 
      <security:access-denied-handler error-page="/403"/> 
     </security:http> 

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

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

     <security:authentication-manager> 
      <security:authentication-provider user-service-ref="userDetailsService"/> 
     </security:authentication-manager> 

     <bean id="redirectRoleStrategy" class="com.payment.system.util.RoleBasedAuthenticationSuccessHandler"> 
      <property name="roleUrlMap"> 
       <map> 
        <entry key="ROLE_ADMIN" value="/admin"/> 
        <entry key="ROLE_USER" value="/client"/> 
       </map> 
      </property> 
     </bean> 
</beans> 

P.S .: Кстати, моя идея стачка-через меня <property name="providers"> линии отчетность мне, что это свойство является устаревшим. Какую собственность я должен заменить?

Спасибо!

+0

, у кого должен быть доступ к '/ addUser' –

+0

пользователь только с ROLE_ADMIN – sidlejinks

ответ

1

Просто добавьте

<security:intercept-url pattern="/**" access="isFullyAuthenticated()" /> 

после всех Yours перехватывать для URL тегов (я имею в виду это должно быть последним)

Для PS вопрос: как объяснено в Javadoc использовать только использовать инъекции конструктора (через constructor-arg тег).

+0

Спасибо, Максим! – sidlejinks

+0

Мой ответ обновлен –

0

Когда вы добавите конфигурацию, предложенную Maksym, она решит вашу проблему аутентификации. Но это НЕ решит вашу проблему авторизации. Пользователь с ролью ROLE_USER сможет получить доступ к/addUser. Два решения:

1) Переместите все URL-адреса, к которым должен быть доступен администратор под/admin **. Это решение может быть сложным.

2) Заменить конфигурацию предложил мой Максим следующей конфигурации:

<security:intercept-url pattern="/**" access="hasRole('ROLE_ADMIN')" /> 

Пожалуйста, не то, что в этом случае пользователь с ролью ROLE_USER будет иметь доступ только к URL-адресов/клиента */**

Скажите, пожалуйста, если вам нужна дополнительная помощь.

С наилучшими пожеланиями,

Michael 

P.S. Я рекомендую определить все бобы через пространство имен, как описано здесь: http://static.springsource.org/spring-security/site/docs/3.0.x/reference/ns-config.html

Он должен устранить предупреждения.

+0

Спасибо всем за ответ. Я достиг необходимого функционала. Но как насчет PS в конце моего стартового поста? :) – sidlejinks

+0

Я обновил ответ – Michael