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 Check và Authorization Check. Nó sử dụng AuthenticationManager và AccessDicisionManager.
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
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.
Subscribe to:
Post Comments
(
Atom
)
chào bạn, có thể cho mình xin source về phần này dc ko?
ReplyDeletemail của mình: huong_duy_hn@yahoo.com hoặc huong.duy.hn@gmail.com
cảm ơn bạn nhiều.
bạn ơi cho mình xin source nhé
ReplyDeletemail mình: hoang21091989@gmail.com
thanks
chào bạn
ReplyDeletemì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 :)