2015-07-27 1 views
3

Я хочу настроить свое веб-приложение для поддержки входа в систему (учетные данные базы данных) или с помощью сертификатов x509 (eId card reader), возможно ли это?Объединить сертификаты x509 и войти в систему с использованием весенней безопасности

ApplicationContext-security.xml:

<http use-expressions="true"> 
     <session-management invalid-session-url="${logout.url}" session-fixation-protection="newSession" > 
      <concurrency-control max-sessions="1" error-if-maximum-exceeded="true" /> 
     </session-management> 

     <intercept-url pattern="/index.zul" requires-channel="http" access="IS_AUTHENTICATED_ANONYMOUSLY" />   
     <intercept-url pattern="/restricted/admin/**" requires-channel="https" access="hasRole('ROLE_ADMIN')" />  
     <intercept-url pattern="/restricted/**" requires-channel="https" access="hasAnyRole('ROLE_PUBLIC', 'ROLE_VDL', 'ROLE_ADMIN', 'ROLE_READ_ONLY')" /> 
     <x509 subject-principal-regex="SERIALNUMBER=(.*?)," user-service-ref="userDetailsService" />  


     <form-login login-page="/index.zul" default-target-url="/restricted/index.zul" 
        authentication-failure-url="/denied.html" 
        login-processing-url="/j_spring_security_check"/> 
     <logout logout-success-url="/index.zul" invalidate-session="true" /> 
     <access-denied-handler error-page="/denied.html"></access-denied-handler> 
</http> 

<authentication-manager alias="authenticationManager"> 
     <authentication-provider> 
      <jdbc-user-service data-source-ref="dataSource" id="userDetailsService" 
           authorities-by-username-query="SELECT u.username, a.authority 
              FROM users u 
              LEFT JOIN users_authorities ua ON u.username=ua.users_username 
              LEFT JOIN authorities a ON ua.authorities_id=a.id 
              WHERE username=?" /> 
     </authentication-provider> 
</authentication-manager> 

<beans:bean id="dataSource" 
     class="org.springframework.jdbc.datasource.DriverManagerDataSource"> 
     <beans:property name="driverClassName" value="${jdbc.driverClassName}" /> 
     <beans:property name="url" value="${jdbc.url}" /> 
     <beans:property name="username" value="${jdbc.username}" /> 
     <beans:property name="password" value="${jdbc.password}" /> 
</beans:bean> 

Форма Войти работает нормально, но Логин сертификатом не работает, я уверен, что есть соответствующий aproche объединить две системы вместе, но я не сделал найти любой полный учебник в Интернете, может ли кто-нибудь мне помочь?

благодарит заранее.

+0

Я уверен, что вы читали Http: // документы. spring.io/spring-security/site/docs/3.0.x/reference/x509.html? Если да, то какая ошибка вы получаете? Создает ли пользовательский атрибут 'userDetailsService' какой-либо серийный номер? – Manuel

+0

Да, но я новичок в безопасности весны, и я пропустил то, что произошло за кулисами ... Я не получаю ошибок, но, похоже, это был конфликт, я изменил свою конфигурацию, и теперь он отлично работает – criflou

ответ

3

спасибо за ваш комментарий и предложения, я изменил свои конфигурации и, кажется, работает хорошо, вот мой новый файл приложение контекст безопасности:

<http use-expressions="true" auto-config="true" access-denied-page="/denied" 
     authentication-manager-ref="authenticationManager"> 

    <intercept-url pattern="/index" access="permitAll" /> 
    <intercept-url pattern="/restricted/admin" access="hasRole('ROLE_ADMIN')" requires-channel="https" /> 
    <intercept-url pattern="/restricted" requires-channel="https" access="hasAnyRole('ROLE_PUBLIC', 'ROLE_VDL', 'ROLE_ADMIN', 'ROLE_READ_ONLY')" /> 

    <form-login login-page="/index.zul" default-target-url="/restricted/index.zul" 
       authentication-failure-url="/denied.html" 
       login-processing-url="/j_spring_security_check"/> 
    <x509 subject-principal-regex="SERIALNUMBER=(.*?)," user-service-ref="x509DS" /> 
    <logout logout-success-url="/index.zul" invalidate-session="true" /> <!--${logout.url}--> 
</http> 


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

<beans:bean id="authenticationProvider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"> 
    <beans:property name="userDetailsService" ref="formDS" /> 
</beans:bean> 

<jdbc-user-service data-source-ref="dataSource" id="formDS" 
             authorities-by-username-query="SELECT u.username, a.authority 
             FROM users u 
             LEFT JOIN users_authorities ua ON u.username=ua.users_username 
             LEFT JOIN authorities a ON ua.authorities_id=a.id 
             WHERE username=? AND u.canlogwithform=TRUE 
             AND expirationdate >= now() " /> 

<jdbc-user-service data-source-ref="dataSource" id="x509DS" authorities-by-username-query="SELECT u.username, a.authority 
             FROM users u 
             LEFT JOIN users_authorities ua ON u.username=ua.users_username 
             LEFT JOIN authorities a ON ua.authorities_id=a.id 
             WHERE username=?" />