2011-08-24 22 views
6

Chcę używać zabezpieczeń Spring do uwierzytelniania użytkowników w mojej aplikacji internetowej .. Ponieważ nie jestem dojrzałym użytkownikiem do Spring Framework, nie mogę uzyskać jasnego pomysłu, w jaki sposób możemy dokonać ustawień konfiguracyjnych, aby użyć jdbc-user- obsługa .. zrobiłem następujące configurations.but jej nie działaUżywanie bazy danych mysql do uwierzytelniania użytkowników w Spring Security?

<authentication-manager> 
    <authentication-provider> 
     <jdbc-user-service data-source-ref="myDataSource"/> 
    </authentication-provider>   
</authentication-manager> 
<beans:bean id="myDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> 
    <beans:property name="driverClassName" value="com.mysql.jdbc.Driver"/> 
    <beans:property name="url" value="jdbc:mysql://localhost:3306/testDB"/> 
    <beans:property name="username" value="admin"/> 
    <beans:property name="password" value="admin"/> 
</beans:bean> 

..can ktoś proszę mi pomóc rozwiązać problem z plikiem konfiguracyjnym próbki. Z góry dzięki.

+0

Jaki jest twój problem? Czy możesz publikować ślady stosów lub wyraźniejsze opisy problemów, z którymi się spotykasz? – beny23

Odpowiedz

6

Zwykle robisz to z niestandardowym UserDetailsService. UserDetailsService to obiekt DAO używany do ładowania danych o użytkowniku podczas próby logowania. Spójrz na metodę loadUserByUsername(String username) i klasę UserDetails na wiosnę.

Yo należy zdefiniować go w kontekście:

<bean id="myDetailsService" 
    class="com.company.service.impl.MyDetailsService" /> 

Aby go użyć można dodać to do konfiguracji zabezpieczeń:

<authentication-manager> 
    <authentication-provider user-service-ref="myDetailsService" /> 
</authentication-manager> 

i wszystko, co filtry bezpieczeństwa będą go używać.

Możesz poprosić o bardziej szczegółowe pytanie, jeśli potrzebujesz pomocy w jego realizacji, ale nie będziesz miał problemów z IMO.

+0

można również podać krótko o jego realizacji również. Próbowałem, ale nie dostaniesz. –

+0

możesz zobaczyć szczegóły dotyczące implementacji w linku podanym w odpowiedzi. http://www.codercorp.com/blog/spring/security-spring/writing-custom-userdetailsservice-for-spring-security.html – Simeon

+0

yes..i dostałem to. –

6

Innym sposobem jest utworzenie tabel przy użyciu standardowego schematu bazy danych sprężyn bezpieczeństwa (http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-schema.html). Następnie można po prostu użyć sprężyna w JDBC userservice:

<security:authentication-provider > 
    <security:jdbc-user-service data-source-ref="dataSource" /> 
    <security:password-encoder hash="sha" /> 
</security:authentication-provider> 

Lub jeśli chcesz użyć własnego schematu można zastąpić zapytania jak to:

<security:authentication-provider> 
    <securiy:jdbc-user-service 
     data-source-ref="dataSource" 
     users-by-username-query="select username, password from users where username=?" 
     authorities-by-username-query="select username, roleName from role..." 
     role-prefix="ROLE_" 
    /> 
</security:authentication-provider> 
+0

Czy to zapytanie zostało naprawione? Ponieważ gdy zmieniam zapytanie według moich tabel, to nie działa, działa tylko wtedy, gdy projektuję zgodnie z tym zapytaniem. – RishiPandey

1

Dodaj te linie do tagu <authentication-provider> :

<authentication-provider> 
    <password-encoder hash="sha-256" /> 
    <jdbc-user-service data-source-ref="dataSource" 
      users-by-username-query=" 
       SELECT username, password, enabled 
       FROM user WHERE username = ?" 

      authorities-by-username-query=" 
       SELECT u.username, r.role_name 
       FROM user u, user_role r, assigned_role a 
       WHERE u.id = a.username 
       AND r.id = a.role_id 
       AND u.username = ?" 
     /> 
</authentication-provider> 

Oczywiście konieczne będzie dostosowanie zapytań do nazw tabel.

Powiązane problemy