`
shijian0306
  • 浏览: 67231 次
  • 来自: ...
文章分类
社区版块
存档分类
最新评论

acegi的配置

阅读更多
applicationContext-acegi-security.xml
1.filterChainProxy配置
<bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy">
  <property name="filterInvocationDefinitionSource">
   <value>
    CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
    PATTERN_TYPE_APACHE_ANT
    /**=httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,securityContextHolderAwareRequestFilter,rememberMeProcessingFilter,anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
   </value>
  </property>
</bean>

2.httpSessionContextIntegrationFilter配置
<bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"/>

3.logoutFilter配置
<bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter">
  <constructor-arg value="/index.jsp"/> <!-- URL redirected to after logout -->
  <constructor-arg>
   <list>
    <ref bean="rememberMeServices"/>
    <bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler"/>
   </list>
  </constructor-arg>
</bean>

4.authenticationProcessingFilter配置
<bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
  <property name="authenticationManager" ref="authenticationManager"/>
  <property name="authenticationFailureUrl" value="/login.jsp?login_error=1"/>
  <property name="defaultTargetUrl" value="/"/>
  <property name="filterProcessesUrl" value="/j_acegi_security_check"/>
  <property name="rememberMeServices" ref="rememberMeServices"/>
</bean>

5.securityContextHolderAwareRequestFilter配置
<bean id="securityContextHolderAwareRequestFilter" class="org.acegisecurity.wrapper.SecurityContextHolderAwareRequestFilter"/>

6.rememberMeProcessingFilter配置
<bean id="rememberMeProcessingFilter" class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter">
  <property name="authenticationManager" ref="authenticationManager"/>
  <property name="rememberMeServices" ref="rememberMeServices"/>
</bean>

7.anonymousProcessingFilter配置
<bean id="anonymousProcessingFilter" class="org.acegisecurity.providers.anonymous.AnonymousProcessingFilter">
  <property name="key" value="changeThis"/>
  <property name="userAttribute" value="anonymousUser,ROLE_ANONYMOUS"/>
</bean>

8.exceptionTranslationFilter配置
<bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter">
  <property name="authenticationEntryPoint">
   <bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
    <property name="loginFormUrl" value="/login.jsp"/>
    <property name="forceHttps" value="false"/>
   </bean>
  </property>
  <property name="accessDeniedHandler">
   <bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
    <property name="errorPage" value="/accessDenied.jsp"/>
   </bean>
  </property>
</bean>

9.filterInvocationInterceptor配置
<bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
  <property name="authenticationManager" ref="authenticationManager"/>
  <property name="accessDecisionManager" ref="accessDecisionManager"/>
  <property name="objectDefinitionSource">
   <value>
    PATTERN_TYPE_APACHE_ANT
    /mainFrame.html=admin,user
    /文件夹1/*.html*=admin,user
    /文件夹2/*.html*=admin,user
    /文件夹3/*.html*=admin
    /accessDenied.jsp*=ROLE_ANONYMOUS
   </value>
  </property>
</bean>

10.accessDecisionManager配置
<bean id="accessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased">
  <property name="allowIfAllAbstainDecisions" value="false"/>
  <property name="decisionVoters">
   <list>
    <bean class="org.acegisecurity.vote.RoleVoter">
     <property name="rolePrefix" value=""/>
    </bean>
    <bean class="org.acegisecurity.vote.AuthenticatedVoter"/>
   </list>
  </property>
</bean>

11.rememberMeServices配置

<bean id="rememberMeServices" class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices">
  <property name="userDetailsService" ref="userDetailsService"/>
  <property name="key" value="changeThis"/>
</bean>

12.authenticationManager配置

<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager">
  <property name="providers">
   <list>
    <ref local="daoAuthenticationProvider"/>
    <bean class="org.acegisecurity.providers.anonymous.AnonymousAuthenticationProvider">
     <property name="key" value="changeThis"/>
    </bean>
    <bean class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider">
     <property name="key" value="changeThis"/>
    </bean>
   </list>
  </property>
</bean>

13.daoAuthenticationProvider配置

<bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
  <property name="userDetailsService" ref="userDetailsService"/>
  <property name="userCache">
   <bean class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache">
    <property name="cache">
     <bean class="org.springframework.cache.ehcache.EhCacheFactoryBean">
      <property name="cacheManager">
       <bean class="org.springframework.cache.ehcache.EhCacheManagerFactoryBean">
        <property name="configLocation" value="classpath:ehcache.xml"/>
       </bean>
      </property>
      <property name="cacheName" value="userCache"/>
     </bean>
    </property>
   </bean>
  </property>
</bean>

14.methodSecurityInterceptor配置

<bean id="methodSecurityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor">
  <property name="authenticationManager" ref="authenticationManager"/>
  <property name="accessDecisionManager" ref="accessDecisionManager"/>
  <property name="objectDefinitionSource">
    <value>
     com.rain.wsh.service.IUserService.get*=IS_AUTHENTICATED_ANONYMOUSLY
      com.rain.wsh.service.IUserService.create*=IS_AUTHENTICATED_ANONYMOUSLY
      com.rain.wsh.service.IUserService.update*=IS_AUTHENTICATED_ANONYMOUSLY
      com.rain.wsh.service.IUserService.delete*=IS_AUTHENTICATED_ANONYMOUSLY
   </value>
  </property>
</bean>

15.loggerListener配置

<!-- This bean is optional; it isn't used by any other bean as it only listens and logs -->
<bean id="loggerListener" class="org.acegisecurity.event.authentication.LoggerListener"/>

注:userDetailsService定义为:
<bean id="userDetailsService" class="com.rain.wsh.service.impl.UserDetailsServiceImpl"/>

package com.rain.wsh.service.impl;

import org.acegisecurity.userdetails.UserDetails;
import org.acegisecurity.userdetails.UserDetailsService;
import org.acegisecurity.userdetails.UsernameNotFoundException;
import org.springframework.dao.DataAccessException;

import com.rain.wsh.dao.IUserDAO;

public class UserDetailsServiceImpl implements UserDetailsService {
private final Logger log = Logger.getLogger(getClass());

private IUserDAO userDAO;

/**
  * @return the userDAO
  */
public IUserDAO getUserDAO() {
  return userDAO;
}

/**
  * @param userDAO the userDAO to set
  */
public void setUserDAO(IUserDAO userDAO) {
  this.userDAO = userDAO;
}

/*
  * (non-Javadoc)
  * @see org.acegisecurity.userdetails.UserDetailsService#loadUserByUsername(java.lang.String)
  */
public UserDetails loadUserByUsername(String userName) throws UsernameNotFoundException, DataAccessException {
 
  UserDetails user = userDAO.getUserByName(userName);
  if (user == null) {
   log.error("The user was not found:" + userName);
   throw new UsernameNotFoundException("The user was not found:" + userName);
  }
  return user;
}

}

注意user必须实现Serializable, UserDetails

二.配置顺序
在web.xml中定义的filter的顺序是非常重要的。不管你实际用到哪个filter,<filter-mapping>的顺序应该是如下所示的:

1.ChannelProcessingFilter,因为可能要重定向到另一种协议。

2.ConcurrentSessionFilter 因为不使用任何SecurityContextHolder的功能,但是需要更新SessionRegistry来表示当前的发送请求的principal。

3. HttpSessionContextIntegrationFilter, 这样当一个web请求开始的时候就可以在SecurityContextHolder中设置一个SecurityContext,当web请求结束的时候任何对SecurityContext的改动都会被copy到HttpSession(以备下一个web请求使用)。

4.Authentication processing mechanisms - AuthenticationProcessingFilter, CasProcessingFilter, BasicProcessingFilter, HttpRequestIntegrationFilter, JbossIntegrationFilter 等 - 修改SecurityContextHolder,使其中包含一个有效的认证请求令牌(token)。

5.SecurityContextHolderAwareRequestFilter, 如果你使用它来在你的servlet容器中安装一个Acegi Security aware HttpServletRequestWrapper。

6.RememberMeProcessingFilter, 如果早期的认证处理过程没有更新SecurityContextHolder,并且请求(request)提供了一个cookie启用remember-me服务,一个合适的被记住的Authentication对象会被放到SecurityContextHolder那里。

7.AnonymousProcessingFilter, 如果早期的认证处理过程没有更新SecurityContextHolder,, 一个匿名Authentication 对象会被放到SecurityContextHolder那里。

8.ExceptionTranslationFilter, 捕获所有的Acegi Security 异常,这样要么返回一个HTTP错误响应或者加载一个对应的AuthenticationEntryPoint。

9.FilterSecurityInterceptor, 保护 web URIs

所有上述的filter使用FilterToBeanProxy或FilterChainProxy。建议在一个应用中使用一个单个的FilterToBeanProxy代理到一个单个的FilterChainProxy。,在FilterChainProxy中定义所有的Acegi Security Filters。如果你使用SiteMesh,确保Acegi Security filters 在 SiteMesh filters调用前调用。这样使SecurityContextHolder在SiteMesh decorator使用前能够及时被装配。
分享到:
评论

相关推荐

    Acegi配置指南[整理].pdf

    在 Acegi 配置指南中,我们主要关注如何设置和配置 Acegi 框架来保护 Web 应用程序的安全。 首先,我们需要在 `web.xml` 文件中配置 Acegi 的过滤器。在示例代码中,定义了一个名为 `Acegi Filter Chain Proxy` 的...

    ldap与Acegi? ----Acegi配置文件解剖

    本文将深入探讨如何在Acegi配置文件中集成LDAP服务,以实现高效的用户身份验证和权限管理。 **LDAP简介** LDAP是一种轻量级目录访问协议,用于存储和检索分布式目录服务中的数据。它被广泛用于存储用户账户信息、...

    Acegi配置web下载,完整

    Acegi配置.mhtAcegi配置的相关配置的信息在里面有一些

    acegi配置文件

    acegi配置文件清单

    Acegi 详细配置说明

    例如,为了配置认证管理器,我们可以创建一个`UserDetailsService`实现,然后在Acegi配置中引用它: ```xml &lt;bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"&gt; ...

    Acegi配置指南

    在配置Acegi时,首先需要在`web.xml`文件中定义一个名为`Acegi Filter Chain Proxy`的过滤器。这个过滤器是Acegi安全机制的核心,它负责拦截所有请求并根据配置执行相应的安全策略。下面是一段典型的`web.xml`配置...

    Acegi 数据库配置安全策略 源代码及图解

    4. **XML配置转换**:在传统的Acegi配置中,安全规则通常写在XML配置文件中。这个资源可能包含了将这些静态XML配置转换为动态数据库配置的方法,这样可以更方便地根据用户角色和权限来调整安全策略。 5. **过滤器与...

    Acegi开发项目教程.pdf

    本教程附带了可运行的示例代码,这将极大地帮助读者理解和调试Acegi配置。通过实践这些示例,读者将能够更深入地理解Acegi的工作方式,以及如何根据项目需求进行定制。 总的来说,Acegi(现为Spring Security)是一...

    acegi学习整理合集

    "浅谈Acegi配置 - Spring - Java - JavaEye论坛.mht"很可能深入讨论了Acegi的配置细节,包括如何设置安全性过滤器链,配置不同的访问控制策略,以及如何处理异常情况。在Acegi中,配置是非常关键的,因为它定义了...

    acegi资料大全-全集

    `浅谈Acegi配置.mht`系列文件可能探讨了Acegi的配置过程,包括基本的配置元素如`&lt;security:global-method-security&gt;`和`&lt;security:http&gt;`,以及如何定义权限表达式和自定义过滤器。Acegi的配置是其强大之处,但也...

    Acegi(四):Acegi初体验及初解剖

    至于文件名"myOwnAcegi",可能是博主自定义的Acegi配置或示例代码。这些文件可能包含了实际的XML配置、自定义的安全类或者用于测试的简单应用代码。通过阅读这些代码,读者可以更直观地学习如何在实际项目中应用...

    acegi 权限控制按钮

    为了在Tomcat服务器上运行,你需要确保Tomcat版本与Acegi兼容,并且正确地设置了`WEB-INF/web.xml`中的Spring和Acegi配置。这通常包括定义Spring的上下文加载器监听器,以及Acegi的安全过滤器链。在部署时,只需将...

    acegi帮助资料

    开发者可以通过这份指南学习如何编写自定义的安全组件,以及如何调试和优化Acegi配置。 《Acegi-springsecurity1.0.7.pdf》可能是Spring Security的早期版本文档,因为Spring Security是从Acegi发展而来。这份文档...

    实战Acegi

    #### Acegi配置详解 在`applicationContext-security-acegi.xml`文件中,配置了Acegi的关键组件,包括安全上下文、认证管理器、授权策略等。 ##### 安全上下文 安全上下文是Acegi的核心,它定义了认证管理器、...

    使用 Acegi 保护 Java 应用程序: 续二

    在"使用 Acegi 保护 Java 应用程序:续二"这篇博文中,作者可能详细介绍了如何集成 Acegi 安全框架到 Java 应用程序中,以及如何配置和定制其安全策略。以下是对 Acegi 安全框架及其应用的一些关键知识点的详解: 1...

    使用 Acegi 保护 Java 应用程序: 续一

    在这里,我们将更进一步,讨论如何配置和实现 Acegi 的具体功能。 首先,我们需要在项目中引入 Acegi 相关的依赖库。这通常通过 Maven 或者 Gradle 等构建工具来完成,确保添加了 Acegi 的核心库和其他必要的 ...

Global site tag (gtag.js) - Google Analytics