`
lzj520
  • 浏览: 215234 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

acegi step by step 1

阅读更多

一、环境设定:

相关jar:

acegi-security-1.0.5.jar - Main classes of the Acegi Security system
cglib-2.1.3.jar - Code-generation library used by Spring
commons-codec-1.3.jar - Encoders and decoders such as Base64, Hex, Phonetic, and URLs
commons-lang-2.1.jar - Helper utilities for java.lang APIs
ehcache-1.2.3.jar - Used for basic caching purposes
freemarker-2.3.8.jar - Used by the Struts implementation
jstl.jar, standard.jar - JavaServer Pages Standard Tag Library (JSTL) tag library
log4j-1.2.13.jar - For logging
ognl-2.6.11.jar - OGNL library used by the Struts implementation
sitemesh-2.3.jar - SiteMesh JAR
spring.jar - Spring Framework JAR
struts2-core-2.0.8.jar - Struts 2 core JAR
xwork-2.0.3.jar - Used by Struts

修改web.xml:

作用是利用spring AOP将filter Proxy到web.xml里去,并拦截相关的request

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
  version="2.4">
  <display-name>AcegiTraining</display-name>
  <context-param>

    <param-name>contextConfigLocation</param-name>
    <param-value>/WEB-INF/applicationContext*.xml</param-value>
  </context-param>
  <filter>
    <filter-name>Acegi Filter Chain Proxy</filter-name>

    <filter-class>
      org.acegisecurity.util.FilterToBeanProxy
    </filter-class>
    <init-param>
      <param-name>targetClass</param-name>
      <param-value>

        org.acegisecurity.util.FilterChainProxy
      </param-value>
    </init-param>
  </filter>
  ...
  ...
  <filter-mapping>
    <filter-name>Acegi Filter Chain Proxy</filter-name>

    <url-pattern>/j_acegi_security_check</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>Acegi Filter Chain Proxy</filter-name>
    <url-pattern>/j_acegi_logout</url-pattern>

  </filter-mapping>
  <filter-mapping>
    <filter-name>Acegi Filter Chain Proxy</filter-name>
    <url-pattern>*.action</url-pattern>
  </filter-mapping>

  <filter-mapping>
    <filter-name>Acegi Filter Chain Proxy</filter-name>
    <url-pattern>*.jsp</url-pattern>
  </filter-mapping>
  ...

</web-app>


二、身份验证

WEB-INF下增加applicationContext-acegi-security.xml文件,并增加验证服务所需要的filter:

web.xml中的FilterToBeanProxy将拦截的内容:

<bean id="filterChainProxy"
    class="org.acegisecurity.util.FilterChainProxy">

    <property name="filterInvocationDefinitionSource">
      <value>
        CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
        PATTERN_TYPE_APACHE_ANT
        /j_acegi_security_check*=httpSessionContextIntegrationFilter,authenticationProcessingFilter
        /**/*=httpSessionContextIntegrationFilter,logoutFilter,
authenticationProcessingFilter,securityContextHolderAwareRequestFilter,
anonymousProcessingFilter,exceptionTranslationFilter,filterInvocationInterceptor
      </value>
    </property>

  </bean>

如果未经过允许的请求,将会由exceptionTranslationFilter处理,将页面转到注册页面处去处理,authenticationProcessingFilterEntryPoint,是身份验证的入口:

                       
<bean id="exceptionTranslationFilter"
  class="org.acegisecurity.ui.ExceptionTranslationFilter">
  <property name="authenticationEntryPoint">
    <ref local="authenticationProcessingFilterEntryPoint" />
  </property>

  ...
</bean>

<bean id="authenticationProcessingFilterEntryPoint"
  class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
  <property name="loginFormUrl">
    <value>/login.jsp</value>
  </property>

  <property name="forceHttps">
    <value>false</value>
</bean>


authenticationProcessingFilter就是进行身份验证所用到的的filter,其主要是依靠authenticationManager来进行数据库或文本文件上存放的注册信息来进行核对:

<bean id="authenticationProcessingFilter"
  class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
  <property name="authenticationManager">
    <ref bean="authenticationManager" />
  </property>

  <property name="authenticationFailureUrl">
    <value>/login.jsp?login_error=1</value>
  </property>
  <property name="defaultTargetUrl">
    <value>/</value>

  </property>
  <property name="filterProcessesUrl">
     <value>/j_acegi_security_check</value>
  </property>
</bean>


<bean id="authenticationManager"
  class="org.acegisecurity.providers.ProviderManager">
  <property name="providers">

    <list>
      <ref local="daoAuthenticationProvider" />
      <ref local="anonymousAuthenticationProvider" />
    </list>
  </property>
</bean>


<bean id="daoAuthenticationProvider"
    class="org.acegisecurity.providers.dao.DaoAuthenticationProvider">
    <property name="userDetailsService"/><ref local="userDetailsService"/></property>
    <property name="userCache">

    ...
    </property>
  </bean>
 
  <bean id="userDetailsService"
    class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
    <property name="userProperties">
      <bean
        class="org.springframework.beans.factory.config.PropertiesFactoryBean">
        <property name="location"
          value="/WEB-INF/users.properties" />

      </bean>
    </property>
  </bean>


users.properties:
james=tom@1231,ROLE_TECHNICIAN
krishna=krish2341,ROLE_TECHNICIAN
smith=pravah@001,ROLE_ADMIN

三、权限验证

在身份验证后,通过权限验证来决定哪些资源由拥有哪些权限的用户使用,httpRequestAccessDecisionManager控制投票方式,exceptionTranslationFilter增加了如果权限验证失败后所转到的处理页面,logoutFilter定义登出后转到首页:

<bean id="filterInvocationInterceptor"
  class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
  <property name="authenticationManager">
    <ref bean="authenticationManager" />
  </property>
  <property name="accessDecisionManager">

    <ref local="httpRequestAccessDecisionManager" />
  </property>
  <property name="objectDefinitionSource">
    <value>
      PATTERN_TYPE_APACHE_ANT
    /index.jsp=ROLE_ADMIN,ROLE_TECHNICIAN
    /order/createOrder.jsp=ROLE_TECHNICIAN
    /order/authorizeOrder.jsp=ROLE_ADMIN
    /login.jsp=ROLE_ANONYMOUS,ROLE_TECHNICIAN,ROLE_ADMIN
    </value>
  </property>

</bean>

<bean id="exceptionTranslationFilter"
    class="org.acegisecurity.ui.ExceptionTranslationFilter">
    <property name="authenticationEntryPoint">
      <ref local="authenticationProcessingFilterEntryPoint" />
    </property>

    <property name="accessDeniedHandler">
      <bean
        class="org.acegisecurity.ui.AccessDeniedHandlerImpl">
        <property name="errorPage" value="/accessDenied.jsp" />
      </bean>
    </property>
  </bean>


<bean id="httpRequestAccessDecisionManager"
    class="org.acegisecurity.vote.AffirmativeBased">
    <property name="allowIfAllAbstainDecisions">
      <value>false</value>

    </property>
    <property name="decisionVoters">
      <list>
        <ref bean="roleVoter" />
      </list>
    </property>

  </bean>
  <bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter" />

<bean id="logoutFilter"
  class="org.acegisecurity.ui.logout.LogoutFilter">
  <constructor-arg value="/index.jsp" />
  <!-- URL redirected to after logout -->
  <constructor-arg>

    <list>
      <bean
        class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler" />
    </list>
  </constructor-arg>
</bean>


至此,acegi配置部分完成,剩下相关页面设计部分。
分享到:
评论

相关推荐

    acegi

    1. **Acegi Security的核心概念** - **身份验证(Authentication)**:Acegi 提供了多种身份验证机制,如基于密码的认证、LDAP认证等,确保只有合法用户能够访问系统资源。 - **授权(Authorization)**:Acegi ...

    ACEGI

    不错的ACEGI 教程

    基于java的ACEGI

    1. **添加依赖**:首先,在项目中引入Acegi的依赖库,通常是通过Maven或Gradle构建工具。 2. **配置Spring**:在Spring的配置文件中,定义Acegi的安全上下文,包括认证和授权策略。 3. **定义安全元数据**:创建...

    spring acegi 详细文档

    1. **AuthenticationManager**:这是处理用户认证的核心组件。它负责验证用户的凭证,如用户名和密码。Acegi支持多种认证源,例如数据库、LDAP服务器或自定义实现。 2. **AccessDecisionManager**:这个组件用于...

    Acegi例子代码+一个很好的学习Acegi的网址

    1. **Acegi例子代码**:这个例子代码可能包含了一个简单的Spring应用,演示了如何配置和使用Acegi进行安全控制。通过运行此示例,你可以了解Acegi的配置过程以及如何在实际应用中集成。 2. **学习网址**:提供了一...

    实战Acegi:使用Acegi作为基于Spring框架的WEB应用的安全框架

    Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for Spring,当前版本为 0.8.3。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和...

    Acegi-spring安全框架

    1. URL资源的访问控制:Acegi能够设定不同用户群体对网页资源的访问权限。例如,所有用户可以访问登录页面,但只有经过授权的用户才能访问特定的业务功能页面。 2. 业务类方法的访问控制:Acegi能够控制Spring容器...

    acegi-src1.0.5

    acegi,spring的安全验证框架

    Spring Acegi权限控制

    1. **安全拦截器(Security Interceptor)**:这是Acegi的核心组件,它根据配置的规则对请求进行拦截,决定是否允许访问。 2. **认证管理器(Authentication Manager)**:负责处理用户的认证请求,通常会集成多种...

    acegi-security 1.0.2

    acegi-security 1.0.2.jar

    Acegi使用.pdf

    ### Acegi安全框架详解 #### 引言 Acegi安全框架是专为Spring框架设计的安全解决方案,它通过深度集成Spring的特性,提供了一套全面、灵活的安全管理方案。不同于传统的安全框架,Acegi采用了面向切面编程(AOP)...

    Acegi_db1.rar_acegi

    1. **身份验证**: Acegi提供了多种身份验证机制,如基于表单的登录、HTTP基本认证、X.509证书等。通过定义AuthenticationProvider,开发者可以自定义身份验证逻辑。 2. **访问控制**:Acegi允许开发者使用基于角色...

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

    Acegi 是一个强大的 Java 安全框架,专用于系统安全编程,尤其在处理认证和授权方面表现出色。在本文中,我们将深入探讨 Acegi 的基本概念、如何设置以及它如何与 Spring 框架集成。 首先,让我们了解 Acegi 的核心...

    spring acegi 使用工程demo

    1. **身份验证**:在Acegi中,身份验证通常通过`AuthenticationProvider`实现,它可以是基于数据库、LDAP或者其他任何可以验证用户凭证的服务。`UsernamePasswordAuthenticationToken`是常用的认证令牌,包含用户名...

    acegisecurity内所有jar包

    包含acegi-security-1.0.7.jar,acegi-security-1.0.7-sources.jar,acegi-security-cas-1.0.7.jar,acegi-security-cas-1.0.7-sources.jar,acegi-security-catalina-1.0.7.jar,acegi-security-catalina-1.0.7-...

    acegi使用说明acegi原理及如何与spring、hibernate结合

    Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全...

    acegi安全框架简介

    Acegi安全系统,是一个用于Spring Framework的安全框架,能够和目前流行的Web容器无缝集成。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean Context,拦截器和面向接口的编程方式。因此,Acegi安全...

    acegi安全策略与CAS整合

    1. 概述: 1.1 背景: 在Web应用中, AceGI提供了一套强大的访问控制和身份验证机制,而CAS则作为外部认证服务器,可以为多个应用提供统一的用户验证。通过整合两者,可以简化用户登录流程,同时加强整体系统的安全...

Global site tag (gtag.js) - Google Analytics