2016-12-26 3 views
-1

Я внедрил весеннюю безопасность в моем webapp.Spring Security User defined url intercepter

Ниже моя безопасность confile файл:

<beans:beans xmlns="http://www.springframework.org/schema/security" 
    xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    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-3.2.xsd"> 

    <!-- enable use-expressions --> 
    <http auto-config="true" use-expressions="true"> 
     <intercept-url pattern="/admin**" access="Admin" /> 

     <!-- access denied page --> 
    <access-denied-handler error-page="/403" /> 
     <form-login 
      login-page="/login" 
      default-target-url="/welcome" 
      authentication-failure-url="/login?error" 
      username-parameter="mobileno" 
      password-parameter="staffpwd" /> 
     <logout logout-success-url="/login?logout" /> 
     <csrf/> 
    </http> 

    <authentication-manager> 
     <authentication-provider> 
      <jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query= 
      "select username,password, enabled from users where username=?" 
      authorities-by-username-query= 
      "select username, role from user_roles where username =? " /> 
     </authentication-provider> 
    </authentication-manager> 

</beans:beans> 

В перехватывают URL прямо сейчас/админ URL разрешен только пользователям роли администратора. Теперь мне нужно добавить новое правило: если кто-то не проверен или заблокирован, то этот пользователь не должен иметь доступ к URL-адресу. Существует несколько бизнес-логик, основанный на вычислениях таблицы db. так как я могу настроить эти пользовательские перехватчики URL.

Его первый раз, чтобы провести весеннюю безопасность, пожалуйста, предложите мне, как я могу это сделать.

Благодаря

ответ

0
<http auto-config="true" use-expressions="true"> 
    <!-- static resource --> 
    <intercept-url pattern="/403" access="permitAll" /> 
    <intercept-url pattern="/login" access="permitAll" /> 

    <!-- only user with Admin role can access --> 
    <intercept-url pattern="/admin**" access="hasRole('Admin')" /> 

    <!-- other urls should be authenticated --> 
    <intercept-url pattern="/**" access="isFullyAuthenticated()" /> 

    <!-- access denied page --> 
    <access-denied-handler error-page="/403" /> 
    <form-login 
     login-page="/login" 
     default-target-url="/welcome" 
     authentication-failure-url="/login?error" 
     username-parameter="mobileno" 
     password-parameter="staffpwd" /> 
    <logout logout-success-url="/login?logout" /> 
    <csrf/> 
</http> 

Теперь я должен добавить новое правило, что если кто-то не проверено или если заблокирован, то, что пользователь не должен получить доступ к url.There являются еще несколько бизнес-логики на основе таблицы БД расчеты

Если вам необходимо реализовать более сложный бизнес, вы должны реализовать свои собственные UserDetailsService или AuthenticationProvider

+0

Спасибо за Ответить. можете ли вы сказать, что если я создаю свой собственный AuthenticationHandler, чем как это использовать в config. так что весна использует этот файл для перехвата URL-адресов – RishiPandey

+0

, у вас есть 'AuthenticationHandler', вы хотите реализовать фильтр? вы можете расширить 'AbstractAuthenticationProcessingFilter',' OncePerRequestFilter', 'GenericFilterBean' или' Filter', а затем поместить его в http config '' – chaoluo