使用ACEGI实现权限控制

阅读更多
使用ACEGI实现权限控制,第一部分

环境:
struts2,acegi1.0.6,spring2.5.1,cas3

一、综述:环境搭建
1.spring和acegi版本
spring2.5.6和acegi1.0.6兼容性问题
会报
java.lang.NoClassDefFoundError: org/springframework/web/bind/RequestUtils
不过据说装合适的spring-webmvc这个jar也可以解决问题,没有测试

1.搭建acegi环境
web.xml配置,使用acegi的过滤器
配置web.xml
中包含新配置文件

 
  acegiFilterChain
  org.acegisecurity.util.FilterToBeanProxy
  
   targetClass
   org.acegisecurity.util.FilterChainProxy
  
 

 
 
  acegiFilterChain
  /*
 


过滤器要放在struts前面,否则会报错。因为有些操作要acegi中的springmvc处理
javax.servlet.ServletException: Filter execution threw an exception
 org.apache.struts2.dispatcher.FilterDispatcher.doFilter(FilterDispatcher.java:389)
java.lang.NoClassDefFoundError: org/springframework/web/bind/RequestUtils


配置acegi配置文件,配置认证管理器、投票管理器、过滤器链、配置acegi的log4j日志





 
 
  
   
    
    
   
  
 
 
 
  
  
 
    
 
 
  
 
 
  
  
   userCache
  
 
 

 
  
 

 
 
  
  
    
          
   
  
  
    
          
   
  
 

 
 
 
  
   
    
   
  
  
  
 

 

 
  
   
    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
    PATTERN_TYPE_APACHE_ANT
    /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,rememberMeFilter,exceptionFilter
   
  
 

 
 

 
 
  
  
  
   
    
    
   
  
  
 

 
 
  
  
  
  
  
  
  
  
 

 
  
  
  
  
  
  
  
 

 
 

 
 
  
  
  
  
   
    
    
   
  
  
  
   
    
   
  
 

 
  
  
  
 

 
  
  
  
   
    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
    PATTERN_TYPE_APACHE_ANT
    /index.jsp=ROLE_LOGIN
    /*action=ROLE_LOGIN
   
  
 


说明:
1、过滤器链:filterChainProxy,有顺序要求
/**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,rememberMeFilter,exceptionFilter,securityInterceptor

2、rememberMe配置要点
rememberMeServices使用TokenBasedRememberMeServices,token64编码后放入cookie
logoutFilter使用rememberMeServices,离开后保存cookie

rememberMeFilter配置authenticationManager和rememberMeServices
rememberMeServices的parameter和html表单的Remember Me字段的name一致
rememberMeServices的key和authenticationManager中的rememberMeAuthenticationProvider的key要一致

3、使用DaoAuthenticationProvide实现基于数据库的用户认证授权,userDetailsService中可以用注入sql使用数据库实现,文件方式保存用户基本没啥用
修改usersByUsernameQuery和authoritiesByUsernameQuery注入sql
使用Ehache提高性能

4、配置日志

      class="org.acegisecurity.event.authentication.LoggerListener" />

  class="org.acegisecurity.event.authorization.LoggerListener" />

对应的,如果是log4j.xml
log4j.xml

 
 

如果是log4j.properties
log4j.properties
log4j.logger.org.acegisecurity=DEBUG 


5.表单认证
  class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
 
 
 
 
 
 
 
 

表单中的username和password的name这里为j_username和j_password,acegi的springmvc实现中用
filterProcessesUrl默认是j_acegi_security_check,可以修改,需要登录页面同步

6.用户注销
logoutFilter中filterProcessesUrl默认是j_acegi_logout,只要将退出页面中url设置为j_acegi_logout就可以触发


7.授权
accessDecisionManager:事前评估。使用投票表决器。RoleVoter是基于角色的投票表决器。
这里securityInterceptor使用文件配置,也可以修改为数据库方式实现

8.使用aop对方法授权

你可能感兴趣的:(security,acegi)