`
weisong0127
  • 浏览: 15856 次
  • 性别: Icon_minigender_1
  • 来自: 天津
文章分类
社区版块
存档分类
最新评论
阅读更多
1、在web.xml中

<!-- ******应用范围内参数初始化,安全认证将放在applicationContext-acegi-security.xml****** -->
    <context-param>
  <param-name>contextConfigLocation</param-name>
  <param-value>
   /WEB-INF/context/applicationContext-*.xml
  </param-value>
    </context-param>

<!--Acegi Filter Chain Proxy -->
   <filter>
     <filter-name>Acegi Filter Chain Proxy</filter-name>
     <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
     <init-param>
      <param-name>targetBeanName</param-name>
      <param-value>filterChainProxy</param-value>
    </init-param>
   </filter>

<!--Acegi Filter Chain Proxy -->

<filter-mapping>
      <filter-name>Acegi Filter Chain Proxy</filter-name>
      <url-pattern>/j_oa_security_check</url-pattern>
    </filter-mapping>
   
    <!-- LogOut -->
<filter-mapping>
      <filter-name>Acegi Filter Chain Proxy</filter-name>
      <url-pattern>/j_spring_security_logout</url-pattern>
    </filter-mapping>
   
    <filter-mapping>
      <filter-name>Acegi Filter Chain Proxy</filter-name>
      <url-pattern>*.ao</url-pattern>
    </filter-mapping>
   
    <filter-mapping>
      <filter-name>Acegi Filter Chain Proxy</filter-name>
      <url-pattern>*.jsp</url-pattern>
    </filter-mapping>

<filter-mapping>
      <filter-name>Acegi Filter Chain Proxy</filter-name>
      <url-pattern>*.servlet</url-pattern>
    </filter-mapping>
   
    <filter-mapping>
      <filter-name>Acegi Filter Chain Proxy</filter-name>
      <url-pattern>*.editDoc</url-pattern>
    </filter-mapping>
    <filter-mapping>
      <filter-name>Acegi Filter Chain Proxy</filter-name>
      <url-pattern>*.openAccessory</url-pattern>
    </filter-mapping>

2、applicationContext-acegi-security.xml中

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:security="http://www.springframework.org/schema/security" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-2.0.xsd">

<!-- ======================== FILTER CHAIN ======================= -->
<!--
  FilterChainProxy会按顺序来调用这些filter,使这些filter能享用Spring ioc的功能,
  CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON定义了url比较前先转为小写
  PATTERN_TYPE_APACHE_ANT定义了使用Apache ant的匹配模式
  rememberMeProcessingFilter,,anonymousProcessingFilter
  channelProcessingFilter,filterInvocationInterceptor
-->
<!-- CAS 单点登陆 用casProcessingFilter代替authenticationProcessingFilter实现单点登陆 -->
<bean id="filterChainProxy" class="org.springframework.security.util.FilterChainProxy">
  <security:filter-chain-map path-type="ant"> 
    <!--security:filter-chain pattern="/**" 
                filters="httpSessionContextIntegrationFilter,logoutFilter,casProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor" /--> 
            <security:filter-chain pattern="/**" 
                filters="httpSessionContextIntegrationFilter,logoutFilter,authenticationProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor" /> 
        </security:filter-chain-map>
</bean>

<!-- ======================== AUTHENTICATION ======================= -->
     <!--
         通过Providers提供认证者列表,如果一个认证提供者失败可以尝试另外一个认证提供者,以保证获取不同来源的身份认证,如
         DaoAuthenticationProvider 从数据库中读取用户信息验证身份
         AnonymousAuthenticationProvider 匿名用户身份认证
         RememberMeAuthenticationProvider 已存cookie中的用户信息身份认证

         其它的还有
         AuthByAdapterProvider 使用容器的适配器验证身份
         CasAuthenticationProvider 根据Yale中心认证服务验证身份, 用于实现单点登录
         JaasAuthenticationProvider 从JASS登录配置中获取用户信息验证身份
         RemoteAuthenticationProvider 根据远程服务验证用户身份
         RunAsImplAuthenticationProvider 对身份已被管理器替换的用户进行验证
         X509AuthenticationProvider 从X509认证中获取用户信息验证身份
         TestingAuthenticationProvider 单元测试时使用

         每个认证者会对自己指定的证明信息进行认证,如DaoAuthenticationProvider仅对UsernamePasswordAuthenticationToken这个证明信息进行认证。
     -->
    <bean id="authenticationManager" class="org.springframework.security.providers.ProviderManager">
     <property name="providers">
         <list>
          <ref local="daoAuthenticationProvider"/>
          <!-- CAS 单点登陆 用casAuthenticationProvider代替 daoAuthenticationProvider实现单点登陆-->
          <!--ref bean="casAuthenticationProvider"/-->
            <ref local="anonymousAuthenticationProvider"/>
    <ref local="rememberMeAuthenticationProvider"/>
         </list>
      </property>
   </bean>
  
   <!-- 认证提供者  -->
   <!-- 用于认证匿名用户 -->
<bean id="anonymousAuthenticationProvider" class="org.springframework.security.providers.anonymous.AnonymousAuthenticationProvider">
  <property name="key" value="blhOaWebKey2"/>
</bean>

  <bean id="passwordEncoder" class="org.springframework.security.providers.encoding.Md5PasswordEncoder"/>
<!--
  基于数据库的认证提供者
         authenticationDao 认证数据访问对象,用于获取用户信息,包括:用户名,用户密码,用户状态和用户权限
         userCache ehcache 缓存user信息。
         saltSource 对密码进行私钥加密
     -->
<bean id="daoAuthenticationProvider" class="org.springframework.security.providers.dao.DaoAuthenticationProvider">
       <property name="userDetailsService">
        <ref bean="userManagerService"/>
       </property>
       <property name="passwordEncoder"><ref local="passwordEncoder"/></property>
       <property name="saltSource">
        <bean class="org.springframework.security.providers.dao.salt.ReflectionSaltSource">
         <property name="userPropertyToUse">
          <value>getUsername</value>
         </property>
        </bean>
       </property>
</bean>

   
    <!-- ======================== FILTER        ======================= -->
  <!--
         每次request前 HttpSessionContextIntegrationFilter从Session中获取Authentication对象,在request完后
         又把Authentication对象保存到Session中供下次request使用,此filter必须其他Acegi filter前使用
         org.acegisecurity.context.HttpSessionContextIntegrationFilter
     -->
    
    
<bean id="httpSessionContextIntegrationFilter" class="com.ber.acegi.extend.BerHttpSessionContextIntegrationFilter">
  <property name="loginFormUrl" value="/sof_login.jsp"/>
  <!-- 不需要登陆就可以访问的资源 -->
  <property name="noAuthenticationUrl">
   <list>
    <value>/j_oa_security_check</value>
    <value>/sof_login.jsp</value>
    <value>/sysmanage/ug/useradd.ao</value>
   </list>
  </property>
</bean>

<!--
  利用cookie自動登入
-->
   <bean id="rememberMeServices" class="org.springframework.security.ui.rememberme.TokenBasedRememberMeServices">
  <property name="userDetailsService" ref="userManagerService"/>
  <property name="key" value="blhOaWebKey"/>
  <property name="tokenValiditySeconds" value="864000"/>
</bean>
   
<bean id="rememberMeAuthenticationProvider" class="org.springframework.security.providers.rememberme.RememberMeAuthenticationProvider">
  <property name="key" value="blhOaWebKey"/>
</bean>

<!--
  登出處理
-->
<bean id="logoutFilter" class="org.springframework.security.ui.logout.LogoutFilter">
  <!-- URL redirected to after logout -->
  <constructor-arg value="/sof_login.jsp"/>
  <constructor-arg>
   <list>
    <ref bean="rememberMeServices"/>
    <bean class="org.springframework.security.ui.logout.SecurityContextLogoutHandler"/>
    </list>
  </constructor-arg>
</bean>

<!--
   处理基于表单的身份验证请求(Acegi提供了三个认证处理过滤器,另外两个是:BasicProcessingFilter和CasProcessingFilter)
         authenticationFailureUrl定义登录失败时转向的页面
         defaultTargetUrl定义登录成功时转向的页面
         filterProcessesUrl定义登录请求的页面
     -->
<bean id="authenticationProcessingFilter" class="com.ber.acegi.extend.LogAuthenticationProcessingFilter">
       <property name="authenticationManager" ref="authenticationManager"/>
       <property name="authenticationFailureUrl" value="/sof_login.jsp?login_error=1"/>
       <property name="defaultTargetUrl" value="/jsp/desktop/main.jsp"/>
       <!--
     <property name="defaultTargetUrl" value="/jsp/mainFrame.jsp?showFirstMessage=1"/>
        -->
     <!-- CAS单点登陆 用/j_spring_cas_security_check代替 /j_oa_security_check实现单点登陆-->
     <!-- property name="filterProcessesUrl" value="/j_spring_cas_security_check"/-->
       <property name="filterProcessesUrl" value="/j_oa_security_check"/>
    </bean>
  
   <!--
         filterInvocationInterceptor在执行转向url前检查objectDefinitionSource中设定的用户权限信息
         过程:
         首先,objectDefinitionSource中定义了访问URL需要的属性信息(这里的属性信息仅仅是标志,告诉accessDecisionManager要用哪些voter来投票)
         然后,authenticationManager掉用自己的provider来对用户的认证信息进行校验。
         最后,有投票者根据用户持有认证和访问url需要的属性,调用自己的voter来投票,决定是否允许访问。-->
  
    <bean id="filterInvocationInterceptor" class="org.springframework.security.intercept.web.FilterSecurityInterceptor">
         <property name="authenticationManager"><ref bean="authenticationManager"/></property>
       <property name="accessDecisionManager"><ref local="httpRequestAccessDecisionManager"/></property>
       <property name="objectDefinitionSource"> <ref local="rdbmsFilterInvocationDefinitionSource" /></property>
       <property name="observeOncePerRequest" value="false"></property>
       <property name="alwaysReauthenticate" value="true"></property>
    </bean>
    <bean id="rdbmsFilterInvocationDefinitionSource"  class="com.ber.acegi.extend.RdbmsFilterInvocationDefinitionSource">
    <constructor-arg type="org.springframework.security.util.UrlMatcher"  ref="antUrlPathMatcher" />
    <property name="webresdbCache" ref="webresCacheBackend" />
    <property name="rdbmsInvocationDefinition">
     <bean class="com.ber.acegi.extend.RdbmsSecuredUrlDefinition">
      <constructor-arg index="0">
       <ref bean="dataSource"/>
      </constructor-arg>
      <constructor-arg index="1">
       <value>
      SELECT     MATCHURL_ AS url, MENUCODE_ AS role
      FROM         T_MENU_RESOURCE
      ORDER BY INDEX_ DESC
     </value>
      </constructor-arg>
      <property name="urlField" value="url"/>
      <property name="rolesField" value="role"/>
     </bean>
    </property>
    </bean>
    <bean id="antUrlPathMatcher"  class="org.springframework.security.util.AntUrlPathMatcher" /> 
 
    <bean id="webresCacheBackend"  class="org.springframework.cache.ehcache.EhCacheFactoryBean">
       <property name="cacheManager">
          <ref  bean="cacheManager"/>
       </property>
       <property name="cacheName">
          <value>webresdbCache</value>
       </property>
    </bean>
 
   
    <!-- httpRequestAccessDecisionManager(投票通过策略管理器)用于管理投票通过策略。Acegi提供三种投票通过策略的实现:
   AffirmativeBased(至少一个投票者同意方可通过),ConsensusBased(多数投票者同意方可通过),UnanimousBased(所有投
   票者同意方可通过)
   allowIfAllAbstainDecisions : 设定是否允许:“没人反对就通过”的投票策略
   decisionVoters : 投票者
-->
    <bean id="httpRequestAccessDecisionManager" class="org.springframework.security.vote.AffirmativeBased">
      <property name="allowIfAllAbstainDecisions"><value>false</value></property>
      <property name="decisionVoters">
         <list>
             <ref bean="roleVoter"/>
         </list>
      </property>
   </bean>
  
   <!--
         必须是以rolePrefix设定的value开头的才会进行投票,否则为弃权
     -->
   <bean id="roleVoter" class="org.springframework.security.vote.RoleVoter">
     <property name="rolePrefix"><value>AUTH_</value></property>
   </bean>
  
<bean id="exceptionTranslationFilter" class="org.springframework.security.ui.ExceptionTranslationFilter">
  <property name="authenticationEntryPoint">
   <ref bean="authenticationProcessingFilterEntryPoint"/>
   <!-- CAS 单点登陆 用casProcessingFilterEntryPoint代替authenticationProcessingFilterEntryPoint实现单点登陆 -->
   <!--ref bean="casProcessingFilterEntryPoint"/-->
  </property>
  <property name="accessDeniedHandler">
   <bean class="org.springframework.security.ui.AccessDeniedHandlerImpl">
    <property name="errorPage" value="/jsp/common/403.jsp"/>
   </bean>
  </property>
   </bean>
<!--
    用户尚未通过身份验证时,会将控制转交到一个认证入口点,提供三种实现
    BasicProcessingFilterEnteyPoint :HTTP基本认证处理
    AuthenticationProcessingFilterEntryPoint :将用户重新定向到一个基于HTML表单的登入界面
    CasProssingFilterEntryPoint :将用户重新定向到一个基于Yale CAS登入界面
  -->
  <bean id="authenticationProcessingFilterEntryPoint" class="org.springframework.security.ui.webapp.AuthenticationProcessingFilterEntryPoint">
    <property name="loginFormUrl" value="/sof_login.jsp"/>
    <property name="forceHttps" value="false"/>
    <property name="serverSideRedirect" value="false"></property>
</bean>

</beans>
分享到:
评论

相关推荐

    acegi 完整实例

    本实例提供的内容是关于Acegi Security的全面应用,涵盖了多个关键的安全功能。 1. **匿名登录**:Acegi允许用户在不提供详细认证信息的情况下访问特定资源。这通常用于提供公共信息或服务,如网站的首页。通过配置...

    Acegi学习笔记--Acegi详解实战Acegi实例

    以下是对Acegi的详细介绍和实战应用实例。 一、Acegi的基本概念 1. **认证(Authentication)**:确定用户身份的过程,如用户名和密码的验证。 2. **授权(Authorization)**:确定已认证的用户是否有权限执行特定...

    acegi实例,acegi详细配置和代码实现

    在本实例中,我们将探讨Acegi Security的配置、详细设置以及如何通过代码实现其功能。 首先,让我们理解Acegi Security的核心概念。该框架提供了一种基于角色的访问控制(RBAC)机制,允许开发人员定义用户权限并...

    一个简单的Acegi入门实例

    &lt;!!-- web.xml文件 --&gt; &lt;?xml version="1.0" encoding="UTF-8"?&gt; ...&lt;param-value&gt;/WEB-INF/acegi-config.xml&lt;/param-value&gt; &lt;/context-param&gt; &lt;!-- Acegi 的 Filter Chain 代理 --&gt; &lt;filter&gt; &lt;filter-name&gt;

    acegi开发 实例

    这个链接可能包含了一个简单的Acegi配置和使用示例,帮助初学者快速上手。 **6. Acegi到Spring Security的过渡** 随着Spring Security的发展,Acegi逐渐被后者取代。虽然Acegi已经不再维护,但了解其工作原理对于...

    acegi 详细实例

    通过这个实例,你可以学习到如何在实际项目中应用 Acegi,如何配置并调试安全设置,以及如何处理常见的安全问题。对于任何需要安全控制的 Java Web 应用来说,理解和掌握 Acegi 的使用都是至关重要的。

    spring Acegi例子,很简单的一个acegi实例,容易理解

    3. **过滤器安全链(Filter Security Interceptor)**:Acegi的核心组件之一,它是Servlet过滤器,负责拦截请求并根据配置的策略进行身份验证和授权。 4. **安全性配置(Security Configurations)**:在Spring应用...

    Acegi Security整合CAS实例

    标题和描述均提到了“Acegi Security整合CAS实例”,这涉及到Spring Framework下的Acegi Security模块与CAS(Central Authentication Service)的集成。Acegi Security是Spring框架的一个子项目,旨在为应用提供安全...

    最简单acegi权限管理实例

    总的来说,这个"最简单acegi权限管理实例"是一个很好的学习起点,通过实践可以了解Acegi的基本用法,包括用户认证、权限控制、配置文件的理解以及如何与Spring框架集成。在实际项目中,我们需要根据需求进行更复杂的...

    使用acegi控制用户权限实例

    在本实例中,我们将深入探讨如何使用Acegi来控制用户的权限。Acegi Security已经被Spring Security替代,但其核心思想和机制仍然适用于现代的Spring Security。 首先,我们需要理解Acegi的基础概念。Acegi的核心是`...

    acegi 安全框架实例

    使用Acegi安全框架时,开发者需要在Spring配置文件中声明Acegi的相关组件,并定义安全策略。例如,可以定义哪些URL需要用户登录后才能访问,或者哪些操作只有特定角色的用户才能执行。此外,还需要定义认证源,如从...

    Acegi配置指南

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

    acegi实例

    通过这个"acegi实例",我们可以深入了解Acegi如何在Spring应用中实施细粒度的权限控制,以及如何通过配置和编程方式定制安全策略。虽然Acegi已被Spring Security取代,但其核心思想和设计模式依然影响着现代Web应用...

    Acegi学习笔记(JAVA系统安全编程时用到)

    在 Web 应用程序中集成 Acegi 和 Spring,你需要在 `web.xml` 文件中配置 `ContextLoaderListener`,这会启动 Spring 上下文并加载配置文件。例如,你可以指定 `contextConfigLocation` 为 `/WEB-INF/acegi-config....

    Acegi-security-samples-tutorial-1.0.7.zip 实例代码解析

    在这个" Acegi-security-samples-tutorial-1.0.7.zip "压缩包中,包含了一个详细的教程实例,帮助开发者理解并掌握Acegi Security的使用方法。通过将这些示例代码导入到自己的项目并添加注释,我们可以更深入地学习...

    Acegi-spring安全框架

    3. 领域对象的访问控制:除了控制方法调用,Acegi还能确保操作的对象(如领域模型中的实例)符合安全策略。例如,用户只能修改自己的信息,而不能修改其他用户的信息。 Acegi的体系结构由两个主要组件构成: 1. ...

    acegi+ldap

    在描述中提到的"spring + acegi + ldap 权限框架",意味着这个实例展示了如何配置和使用这三者来构建一个完整的权限管理系统。Spring负责处理业务逻辑和依赖注入,Acegi则负责安全管理,包括用户认证和授权,而LDAP...

Global site tag (gtag.js) - Google Analytics