2011-08-24 23 views
6

Tôi muốn sử dụng bảo mật Spring để xác thực người dùng trong ứng dụng web của mình .. Vì không phải là người dùng trưởng thành trong Spring framework, tôi không thể biết rõ cách chúng tôi có thể thực hiện cài đặt cấu hình để sử dụng jdbc-user- dịch vụ .. tôi đã thực hiện những điều sau configurations.but nó không làm việcSử dụng cơ sở dữ liệu mysql để xác thực người dùng trong bảo mật mùa xuân?

<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 ai vui lòng giúp tôi giải quyết vấn đề này với một tập tin mẫu config. Cảm ơn trước.

+0

Vấn đề của bạn là gì? Bạn có thể đăng dấu vết ngăn xếp hoặc mô tả rõ ràng hơn về bất kỳ vấn đề nào bạn đang gặp phải không? – beny23

Trả lời

6

Bạn thường làm điều đó với tùy chỉnh UserDetailsService. UserDetailsService là một DAO được sử dụng để tải dữ liệu về người dùng khi họ cố đăng nhập. Hãy xem phương thức loadUserByUsername(String username) và lớp học UserDetails vào mùa xuân.

Yo cần phải định nghĩa nó trong ngữ cảnh của bạn:

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

Để sử dụng nó, bạn có thể thêm video này vào cấu hình bảo mật của bạn:

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

và tất cả các bạn bộ lọc an ninh sẽ sử dụng nó.

Bạn có thể đặt câu hỏi cụ thể hơn nếu bạn cần trợ giúp triển khai nó, nhưng bạn sẽ không gặp sự cố IMO.

+0

u có thể chỉ cung cấp cho một bản tóm tắt về việc thực hiện nó quá .. tôi đã cố gắng cho điều đó nhưng nó không nhận được. –

+0

bạn có thể xem chi tiết về triển khai trong liên kết được cung cấp trong câu trả lời. http://www.codercorp.com/blog/spring/security-spring/writing-custom-userdetailsservice-for-spring-security.html – Simeon

+0

vâng .. tôi hiểu điều đó. –

6

cách khác để thực hiện việc này là tạo bảng bằng lược đồ cơ sở dữ liệu bảo mật mùa xuân chuẩn (http://static.springsource.org/spring-security/site/docs/3.0.x/reference/appendix-schema.html). Sau đó, bạn chỉ có thể sử dụng JDBC-userservice mùa xuân của:

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

Hoặc nếu bạn muốn sử dụng giản đồ riêng của bạn, bạn có thể ghi đè lên các truy vấn như thế này:

<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

là truy vấn này đã được khắc phục chưa? Bởi vì khi tôi thay đổi truy vấn theo bảng của tôi điều này không hoạt động, nó chỉ hoạt động khi tôi thiết kế theo truy vấn này. – RishiPandey

1

Thêm những dòng này vào thẻ <authentication-provider> của bạn :

<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> 

Tất nhiên, bạn sẽ phải tinh chỉnh truy vấn để khớp với tên bảng của mình.

Các vấn đề liên quan