Acegi Security Bảo mật ứng dụng web bằng Spring Acegi

Bảo mật ứng dụng web bằng Spring Acegi

Nếu ai quan tâm có thể liên hệ lấy source mẫu(netbeans project)

ACEGI

Sử dụng cho bảo mật.

Trong hướng dẫn này:

Mục tiêu:

· Hiểu những nguyên lý cơ bản trong bảo mật ứng dụng web.

· Hiểu sâu vào cơ chế acegi để đạt được mục đích này.

· Hiểu các tùy chọn cấu hình cho acegi.

· Cung cấp một ứng dụng mẫu.

Authentication = bạn là ai.

Authorization = bạn được làm gì.

4 bước để kiểm tra:

1. Kiểm tra việc hạn chế truy cập.

2. Kiểm tra authentication đã tồn tại.

3. Kiểm tra yêu cầu chứng thực.

4. Kiểm tra authorization.

Acegi tạo ra một dậy chuyền:

1. AuthenticationProcesssingFilter kiểm tra yêu cầu chứng thực (login vào ứng dụng). Nó sử dụng AuthenticationManager.

2. HttpSessionContextIntergrationFilter giữ đối tượng Authentication giữa những request, đi vòng qua AuthenticationManager và AccessDecisionManager khi cần thiết.

3. ExceptionTranslationFilter kiểm tra một chứng thực đã tồn tại và xử lý exception chứng thực.

4. FilterSecurityInterceptor quản lý Restricted Access CheckAuthorization Check. Nó sử dụng AuthenticationManagerAccessDicisionManager.

3 bộ lọc (màu đỏ có filter) được cột lại thông qua FilterChainProxy(màu xanh).

FilterChainProxy được cấu hình trong file xml.

FilterChainProxy(org.acegisecurity.util.FilterChainProxy)

Thuộc tính:

· filterInvocationDefinitionSource : chuyển về lower case, gắn pattern ant, gắn kết các Filter Beans, bao gồm :

1. httpSessionContextIntergrationFilter,

2. formAuthenticationProcessingFilter,

3. exceptionTranslationFilter,

4. filterSecurityInterceptor.

formAuthenticationProcessingFilter (org.acegisecurity.ui.webapp.AuthenticationProcessingFilter)

Thuộc tính:

· filterProcessesUrl: xác định trang submit.

· authenticationFailUrl: xác định trang nếu authen fail.

· defaultTargetUrl:

· authenticationManager: xác định authenticationManager để tiếp tục xác thực.

HttpSessionContextIntegrationFilter (org.acegisecurity.context.HttpSessionContextIntegrationFilter)

Đẻ ra một đối tượng bao bọc toàn bộ request. Nó chạy trên một ThreadLocal. :

ExceptionTranslationFilter( org.acegisecurity.ui.ExceptionTranslationFilter)

Bắt mọi lỗi về Authentication và Authorization.

Nếu ngoại lệ là chưa có đối tượng Authentication(chưa login), sinh ra AuthenticationEntryPoint (yêu cầu login chẳng hạn).

Nếu là vi phạm về Authorization, gửi SC_FORBIDDEN(HTTP 403).

Thuộc tính:

· authenticationEntryPoint: xác định bean formLoginAuthenticationEntryPoint.

Nó giao những việc khó cho : FilterSecurityInterceptor và authenticationPoint.

FilterSecurityInterceptor (org.acegisecurity.intercept.web.FilterSecurityInterceptor)

Chứa những định nghĩa về nguồn tài nguyên được bảo mật.

Có 2 bean được định nghĩa ở đây: authenticationManager và accessDecisionManager.(thông qua thuộc tính)

Thuộc tính:

objectDefinitionSource(secured resources): dùng một pattern để lọc:

/secure/admin/*=ROLE_ADMIN

/secure/app/*=ROLE_USER

February 22,2008 09:17 AM

Một số bean:

AuthenticationManager (org.acegisecurity.providers.ProviderManager)

Thuộc tính:

providers : một danh sách( bean daoAuthenticationProvider)

Trong đó: daoAuthenticationProvider (org.acegisecurity.providers.dao. DaoAuthenticationProvider) ref: authenticationDao.

authenticationDao: ở đây sử dụng trực tiếp (org.acegisecurity. userdetails.memory.InMemoryDaoImpl)

Thuộc tính:

userMap: (userName=password, ROLE)

jklaassen=4moreyears,ROLE_ADMIN

bouerj=ineedsleep,ROLE_USER

ở đây dùng inMemory, ngoài ra còn thông qua database via JDBC or even LDAP

AccessDecisionManager(org.acegisecurity.vote.UnanimousBased)

sau khi được Authentication, kế tiếp là Authorization.

Thuộc tính:

decisionVoters: bean roleVoter

roleVoter(org.acegisecurity.vote.RoleVoter)

Thuộc tính:

rolePrefix: ROLE_

AuthenticationEntryPoint(org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint---->formLoginAuthenticationEntryPoint)

Nếu đối tượng authentication chưa có(chưa login) SecurityEnforcementFilter sẽ chuyển qua đối tượng này.

Thuộc tính:

loginFormUrl: Trang jsp sẽ show(có thể dùng servlet nếu muốn).

forceHttps: true=mã hóa UserName/Password, false=none.

Authentication qua JDBC:

Thay vì sử dụng InMemoryDaoImpl ta sẽ sử dụng chứng thực qua JDBC (thường được lm hơn).

Tại bean: userDetailsService(org.acegisecurity.userdetails.jdbc.JdbcDaoImpl)

Thuộc tính:

dataSource: ref bean dataSource

dataSource(org.springframework.jdbc.datasource.DriverManagerDataSource)

Thuộc tính:

driverClassName: com.mysql.jdbc.Driver(others, of course).

url: jdbc:mysql://localhost:3306/springweb_auth_db(nhìn l biết)

username: String value.

password: String value.

Vấn đề cịn lại l chỉ ra tn bảng. Một cch l dng query trn AuthenticationDao(khĩ).

Một cch dễ hơn l chỉ ra ci bảng theo ý muốn của Acegi, như sau: cột ENABLED cũng cĩ thể CHAR/VARCHAR (true/false) AUTHORITY giữ ROLE_NAME. Nếu ai quan tâm thì có thể liên hệ lấy project mẫu.

About Langthang

This is a short description in the author block about the author. You edit it by entering text in the "Biographical Info" field in the user admin panel.
    Blogger Comment
    Facebook Comment

3 comments :

  1. chào bạn, có thể cho mình xin source về phần này dc ko?
    mail của mình: huong_duy_hn@yahoo.com hoặc huong.duy.hn@gmail.com
    cảm ơn bạn nhiều.

    ReplyDelete
  2. bạn ơi cho mình xin source nhé
    mail mình: hoang21091989@gmail.com
    thanks

    ReplyDelete
  3. chào bạn
    mình đang làm một để tài báo cáo trên lớp về acegi bạn có thể cho mình xin souce được không
    mail của mình: trandinh0013@gmail.com
    cảm ơn bạn nha :)

    ReplyDelete