`
longgangbai
  • 浏览: 7340631 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

spring acegi 官方例子

阅读更多

acegi安全是一个强大的,灵活的安全解决方案的企业软件,并特别着重于应用,利用spring。用acegi安全,为用户的应用与全面的认证,授权,例如基于职务的访问控制,通道安全和人类用户检测能力。(google 对acegid的翻译)
参考资料:http://www.tfo-eservices.eu/wb_tutorials/media/SpringAcegiTutorial/HTML/SpringAcegiTutorial-1_1-html.html
里面有一个例子:SpringAcegiTutorial,可以进行下载,并运行,做为一个实例,已经相当不错了。
讲述了admin ,user的登录问题。及权限控件,acegi 的配置。
这个例子是spring mvc + spring acegi 的例子,阅读前最好有spring mvc 的基础。这里只摘录简单的配置说明。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> --><!-- ****** START ACEGI Security Configuration *******-->
    
<!-- ======================== FILTER CHAIN ======================= -->

    
<!--  if you wish to use channel security, add "channelProcessingFilter," in front
        of 
"httpSessionContextIntegrationFilter" in the list below -->
    
<bean id="filterChainProxy"
        
class="org.acegisecurity.util.FilterChainProxy">
        
<property name="filterInvocationDefinitionSource">
            
<value>
                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
                PATTERN_TYPE_APACHE_ANT
                
/**=httpSessionContextIntegrationFilter,formAuthenticationProcessingFilter,exceptionTranslationFilter,filterSecurityInterceptor
            </value>
        </property>
    </bean>

    <!-- Start Security filter config -->
    <bean id="exceptionTranslationFilter"
        class="org.acegisecurity.ui.ExceptionTranslationFilter">
        <property name="authenticationEntryPoint">
            <ref bean="formLoginAuthenticationEntryPoint" />
        </property>
    </bean>

    <!-- Define filter to handle BASIC authentication -->
    <bean id="basicProcessingFilter"
        class="org.acegisecurity.ui.basicauth.BasicProcessingFilter">
        <property name="authenticationManager">
            <ref bean="authenticationManager" />
        </property>
        <property name="authenticationEntryPoint">
            <ref bean="authenticationEntryPoint" />
        </property>
    </bean>

    <!-- Define realm for BASIC login-->
    <bean id="authenticationEntryPoint"
        class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint">
        <property name="realmName">
            <value>Spring Web Realm</value>
        </property>
    </bean>

    <!-- Define filter to handle FORM authentication -->
    <bean id="formAuthenticationProcessingFilter"
        class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter">
        <property name="filterProcessesUrl">
            <value>/j_acegi_security_check</value>
        </property>
        <property name="authenticationFailureUrl">
            <value>/loginFailed.html</value>
        </property>
        <property name="defaultTargetUrl">
            <value>/</value>
        </property>
        <property name="authenticationManager">
            <ref bean="authenticationManager" />
        </property>
    </bean>

    <!-- Define realm for FORM login-->
    <bean id="formLoginAuthenticationEntryPoint"
        class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">
        <property name="loginFormUrl">
            <value>/login.jsp</value>
        </property>
        <property name="forceHttps">
            <value>false</value>
        </property>
    </bean>

    <bean id="httpSessionContextIntegrationFilter"
        class="org.acegisecurity.context.HttpSessionContextIntegrationFilter">
    </bean>
    <!-- End Security filter config -->

    <!-- Start Security interceptor config -->
    <!-- Define authentication manager, decision manager and secure URL patterns -->
    <bean id="filterSecurityInterceptor"
        class="org.acegisecurity.intercept.web.FilterSecurityInterceptor">
        <property name="authenticationManager">
            <ref bean="authenticationManager" />
        </property>
        <property name="accessDecisionManager">
            <ref bean="accessDecisionManager" />
        </property>
        <property name="objectDefinitionSource">
            <value>
                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON
                PATTERN_TYPE_APACHE_ANT 
                /secure/admin/*=ROLE_ADMIN
                /secure/app/*=ROLE_USER
            </value>
        </property>
    </bean>
    <!-- End Security interceptor config -->

    <!-- Start authentication config -->
    <bean id="authenticationManager"
        class="org.acegisecurity.providers.ProviderManager">
        <property name="providers">
            <list>
                <ref bean="daoAuthenticationProvider" />
            </list>
        </property>
    </bean>

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

    <!-- Authentication using In-memory Dao -->
   
    <bean id="userDetailsService"
        class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl">
        <property name="userMap">
            <value>
                jklaassen=4moreyears,ROLE_ADMIN
                bouerj=ineedsleep,ROLE_USER
            </value>
        </property>
    </bean>
    <!-- Authentication using JDBC Dao -->
<!--
     <bean id="userDetailsService"
        class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
        <property name="dataSource">
        <ref bean="dataSource"/>
        </property>
        </bean>
-->
        <!-- End authentication config -->

    <!-- Start authorization config -->
    <bean id="accessDecisionManager"
        class="org.acegisecurity.vote.UnanimousBased">
        <property name="decisionVoters">
            <list>
                <ref bean="roleVoter" />
            </list>
        </property>
    </bean>

    <bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter">
        <property name="rolePrefix">
            <value>ROLE_</value>
        </property>
    </bean>
    <!-- End authorization config -->

    <!-- ****** END ACEGI Security Configuration *******-->

以上就是所有的源代码配置在spring 的配置文件中。详细的说明在官方的文档上。
在上面的配置文件的方式是以in-memory 的方法,也就是在配置文件中指定登录的用户名及密码。在实际的应用中,应用到数据库或其它技术。

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->     <bean id="userDetailsService"
        class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl">
        <property name="dataSource">
        <ref bean="dataSource"/>
        </property>
        </bean>

    
<bean id="dataSource"
        
class="org.springframework.jdbc.datasource.DriverManagerDataSource">
        
<property name="driverClassName">
            
<value>com.mysql.jdbc.Driver</value>
        
</property>
        
<property name="url">
            
<value>jdbc:mysql://localhost:3306/test</value>
        </property>
        
<property name="username">
            
<value>root</value>
        
</property>
        
<property name="password">
            
<value>1</value>
        
</property>
    
</bean>

以上两个bean的代码就是把信息存储到数据库中。
sql 语句如下:

<!--<br /> <br /> Code highlighting produced by Actipro CodeHighlighter (freeware)<br /> http://www.CodeHighlighter.com/<br /> <br /> -->CREATE TABLE `users` (
  `username` varchar(
50) NOT NULL,
  `password` varchar(
50) NOT NULL,
  `enabled` varchar(
50) NOT NULL,
  PRIMARY KEY (`username`)
) ENGINE
=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `users` VALUES (
'dianne','emu','true');
INSERT INTO `users` VALUES (
'marissa','koala','true');
INSERT INTO `users` VALUES (
'peter','opal','true');
INSERT INTO `users` VALUES (
'scott','wombat','true');

CREATE TABLE `authorities` (
  `username` varchar(50) NOT NULL,
  `authority` varchar(50) NOT NULL,
  UNIQUE KEY `ix_auth_username` (`username`,`authority`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
INSERT INTO `authorities` VALUES ('dianne','ROLE_ADMIN');
INSERT INTO `authorities` VALUES ('marissa','ROLE_ADMIN');
INSERT INTO `authorities` VALUES ('marissa','ROLE_USER');
INSERT INTO `authorities` VALUES ('peter','ROLE_USER');
INSERT INTO `authorities` VALUES ('scott','ROLE_ADMIN');
ALTER TABLE `authorities`
ADD FOREIGN KEY (`username`) REFERENCES `users` (`username`);

所有的配置就是这些:
理解一下原理:
1。acegi的添加,可以在程序写完之后再添加,配置灵活但并不简单。
2.四个步骤:
安全是实施这四项检查:

    1 限制出入检查(是以资源担保? ) ;
    2 现有的认证检查(有用户被认证? ) ;
    3 如果没有有效的登录用户:认证要求退房(都是正确的用户名和密码提供? ) ;
    4 授权入住(不含用户拥有所需的角色? ) ;
3.对于授权的处理,未授权的用户无法进行访问。应该设置 403.jsp未授权页面。

分享到:
评论

相关推荐

    spring acegi 详细文档

    Spring Acegi是一个安全框架,它为Spring应用提供了一套强大的身份验证和授权机制。这个框架在Spring Security(之前称为Spring Security)之前被广泛使用。在本文中,我们将深入探讨Spring Acegi的核心概念、功能和...

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

    在Spring Acegi的例子中,我们首先需要了解的是基础概念: 1. **身份验证(Authentication)**:这是验证用户身份的过程,通常通过用户名和密码来完成。在Acegi中,`AuthenticationProvider`接口负责处理身份验证...

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

    Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for ...通过这个例子详细介绍如何配置Acegi的各个组件,同时介绍如何扩展Acegi 使其能够从数据库中读取配置信息。

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

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

    acegi spring 例子

    Acegi Security是Spring框架早期的一个安全模块,它为Spring应用提供了强大的访问控制和身份验证功能。随着Spring的发展,Acegi Security已经被Spring Security所取代,但理解Acegi在Spring中的运用对于学习Spring ...

    acegi 登录例子

    1. 我的spring使用myeclipse向导加入的2.5版本 (附件中不包含) 2. 我加入的是(源代码中已存在): acegi-security-1.0.7.jar 加入了数据库驱动(mysql5) mysql-connector-java-5.1.6-bin.jar 这两个包附件...

    acegi与spring、hibernate结合很好的例子

    在"acegi与spring、hibernate结合很好的例子"中,我们可以深入探讨以下几个关键知识点: 1. **Acegi Security集成Spring**: - Acegi Security通过Spring的Bean定义和依赖注入机制进行配置,允许开发者以声明式的...

    acegi 例子 进行了扩展

    Acegi Security是一个在Spring框架基础上构建的权限管理系统,它为Java企业级应用提供了全面的身份验证和授权服务。这个“acegi 例子”是针对Acegi Security的一个实例化演示,可以帮助开发者理解并掌握如何在实际...

    acegi安全框架例子

    Acegi安全框架是Spring Framework的一个强大补充,专为应用程序安全设计。它提供了全面的身份验证、授权和服务保护功能,使得开发者可以轻松地在Spring应用中实现复杂的安全需求。本例将探讨Acegi安全框架的主要概念...

    acegi 例子源码

    这个"acegi 例子源码"很可能是基于《精通spring2.x企业级应用》第17章的内容,该章节可能详细介绍了如何利用Acegi Security进行权限管理和用户认证。 在Spring 2.x的时代,Acegi Security是一个非常重要的安全解决...

    Acegi 例子

    Acegi 是一个基于 Spring 的安全框架,它在 Java 应用程序中提供了全面的身份验证、授权和服务层安全功能。在本篇文章中,我们将深入探讨 Acegi 的核心概念、使用场景以及如何在实际项目中实现安全控制。 Acegi 的...

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

    Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for ...通过这个例子详细介绍如何配置Acegi的各个组件,同时介绍如何扩展Acegi 使其能够从数据库中读取配置信息

    struts spring hibernate 宠物医院例子

    Spring Security 或 Acegi Security 可能被用来实现这些功能,提供安全的用户认证和授权机制。 在实际开发过程中,SSH 集成的例子可以帮助开发者更好地理解这三大框架的协同工作方式,以及它们如何解决实际问题。这...

    Acegi+Hibernate+Spring+JSF列子

    在这个"Acegi+Hibernate+Spring+JSF例子"中,我们可以看到这四个框架如何协同工作,为开发者提供一套完整的解决方案。 首先,让我们逐一了解这些框架的核心功能: 1. **Acegi**(现已被Spring Security替代):...

    acegi 例子 近企业中项目中使用的项目架构 支持数据库

    Acegi Security是Spring框架早期的一个安全模块,它提供了一套全面的企业级认证和授权解决方案。在本示例中,我们探讨的"acegi 例子"是一个基于Acegi Security的项目,它展示了如何在实际企业环境中集成和配置安全性...

    acegi学习指南以及例子

    Acegi是Spring Security的前身,它是一个用于Java企业级应用的安全框架,主要处理身份验证、授权和会话管理。在本文中,我们将深入探讨Acegi的学习指南,通过实例来理解其核心概念和功能。 首先,我们需要了解Acegi...

    基于Acegi的Form表单验证的例子

    学习这个例子,你可以理解Acegi如何集成到Spring应用中,如何进行表单验证和权限控制,这对于构建安全的Web应用程序至关重要。记住,虽然Acegi在后期被Spring Security替代,但其核心概念和机制在Spring Security中...

    Spring+Hibernate+Acegi 的初次体验

    总结一下,这个例子展示了如何结合Spring、Hibernate和Acegi实现一个角色基础的安全控制。通过Acegi,我们可以轻松地管理用户认证和授权,实现灵活的角色和权限分配。而Hibernate的单表继承策略使得数据库设计简洁...

    spring-Acgei的一个小例子之一

    以下是一个简单的例子,展示了如何使用Acegi保护接口`ISome`中的方法: 1. 定义接口ISome: ```java package onlyfun.caterpillar; public interface ISome { public void doNormal(); public void doSupervisor...

    spring-Acgei的一个小例子之二

    ### Spring与Acegi Security结合应用:用户验证及缓存机制 #### 一、Spring与Acegi Security概述 在本文档中,我们将深入了解如何利用Spring框架的IoC(Inverse of Control,控制反转)容器来实现Acegi Security的...

Global site tag (gtag.js) - Google Analytics