- 浏览: 233459 次
- 性别:
- 来自: 上海
文章分类
最新评论
-
ie7shop:
<developer> &l ...
Apache CXF 第一篇:HelloWorld -
zhu547043537:
...
Apache CXF 第一篇:HelloWorld -
dxg625:
您好!麻烦可以把SplitPageUI、Page、Consta ...
SWT/JFace AbstractTableViewer 分页 -
daichangfu:
不错,不错,借鉴一下
校验全国组织机构代码是否合法 -
brofe:
不好意思,全部的源码没空整理出来!这里给出的代码片段,也是为了 ...
SWT/JFace AbstractTableViewer 分页
该篇东西详细的讲述了Acegi的相关配置,并在附件上有测试用的Eclipse工程,内含一个基于内存和一个基于MYSQL数据媒介的安全访问控制。每个配置文件里面都包含详细的注释。
<?xml version="1.0" encoding="UTF-8"?> <!-- /** * 基于内存的安全访问控制 * * @date 2008-11-02 * @author brofe@163.com */ --> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd"> <!-- FilterChainProxy, 过滤器链的配置 FilterChainProxy 受FilterToBeanProxy委托组织过滤器链,并按顺序调用,并包含一下配置信息 1、CONVERT_URL_TO_LOWERCASE/UPPERCASE_BEFORE_COMPARISON 表示对URL匹配之前将其转化为小写或大写。 2、PATTERN_TYPE_APACHE_ANT 表示使用Ant的风格匹配URL的描述,默认是使用正则表达式。 3、/**=**,**,** 表示多个过滤器组成的过滤器链,过滤器之间用逗号隔开且直接不能包含回车换行。 4、主要支持的过滤器有:HttpSessionContextIntegrationFilter、ExceptionTranslationFilter、 ChannelProcessingFilter、LogoutFilter、AuthenticationProcessingFilter --> <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"> <property name="filterInvocationDefinitionSource"> <value> CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON PATTERN_TYPE_APACHE_ANT /**=authenticationProcessingFilter,logoutFilter,rememberMeProcessingFilter,exceptionTranslationFilter </value> </property> </bean> <!-- AuthenticationProcessingFilter 认证过滤器的配置 Acegi提供多种认证方式,如基于内存、DB、CA、LDAP等。它包含如下配置信息: 1、authenticationManager, 表示指定认证信息的提供者,它负责从储存了用户身份和用户安全信息的媒介中读取认证所需的数据。 2、filterProcessesUrl, 表示处理用户身份认证服务所在的URL。页面表单通过"j_username"、"j_password"传递待认证的用户信息。 3、defaultTargetUrl, 表示认证成功后转向的URL。 4、authenticationFailureUrl, 表示认证失败后转向的URL。 --> <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"> <property name="authenticationManager" ref="authenticationManager" /> <property name="authenticationFailureUrl" value="/acegilogin.jsp?login_error=1" /> <property name="defaultTargetUrl" value="/userinfo.jsp" /> <property name="filterProcessesUrl" value="/j_acegi_security_check" /> </bean> <!-- ProviderManager 认证提供者的配置 ProviderManager,从储存了用户身份和用户安全信息的媒介中读取认证所需的数据或者说是一个认证列表。 当一个认证提供者失败Acegi尝试从另外一个认证提供者获取,保证能兼容不同来源的身份认证。如: DaoAuthenticationProvider 从数据库中读取用户信息验证身份 AnonymousAuthenticationProvider 匿名用户身份认证 RememberMeAuthenticationProvider 已存cookie中的用户信息身份认证 AuthByAdapterProvider 使用容器的适配器验证身份 CasAuthenticationProvider 根据Yale中心认证服务验证身份, 用于实现单点登陆 JaasAuthenticationProvider 从JASS登陆配置中获取用户信息验证身份 RemoteAuthenticationProvider 根据远程服务验证用户身份 RunAsImplAuthenticationProvider 对身份已被管理器替换的用户进行验证 X509AuthenticationProvider 从X509认证中获取用户信息验证身份 TestingAuthenticationProvider 单元测试时使用 注意:每个认证者会对自己指定的证明信息进行认证, 如DaoAuthenticationProvider仅对UsernamePasswordAuthenticationToken这个证明信息进行认证。 认证提供者包含以下配置信息: 1、providers,表示可以配置一个或多个认证提供者。 --> <bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"> <!-- 可以拥有多个认证管理处理类,只要一个认证通过就可以了 --> <property name="providers"> <list> <!-- 基于DAO的认证提供者 --> <ref bean="daoAuthenticationProvider"/> <!-- 基于Cookie的认证提供者 --> <bean class="org.acegisecurity.providers.rememberme.RememberMeAuthenticationProvider"> <property name="key" value="acegicookie" /> </bean> </list> </property> </bean> <!-- DaoAuthenticationProvider 基于DAO的认证提供者的配置 该配置负责从数据库或其他保存用户信息的媒介中获取用户信息进行认证。该类首先从SecurityContextHolder的Authentication 中得到待认证的用户名,并根据该用户名获取保存在数据库或其他媒介中代表真正系统用户的UserDetails对象中。紧接着比较Authentication 和UserDetails的匹配关系(如密码时候相等)。如果两者匹配,认证成功,并将UserDetails的权限信息复制到Authentication中; 如果不匹配,认证失败。 1、userDetailsService, 表示DaoAuthenticationProvider通过UsesDetailsService完成UserDetails的获取工作。 --> <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"> <!-- 将用户保存在内存里面的一种简单方式 --> <property name="userDetailsService" ref="userDetailsService" /> </bean> <!-- UserDetailsService, 用户获取UserDetails实例的配置 Acegi根据存储用户信息的媒介不同,提供两个UserDetailsService的实现类: 1、InMemoryDaoImpl:该实现类负责从内存中获取用户信息。它允许通过"userMap"和"userProperties"等媒介中获取用户信息。 2、JdbcDaoImpl:该实现类负责从数据库中获取用户信息。 --> <bean id="userDetailsService" class="org.acegisecurity.userdetails.memory.InMemoryDaoImpl"> <!-- 将用户信息和权限信息直接保存在内存中 --> <!-- <property name="userMap"> <value> brofe=123,ROLE_ADMIN lemonade=123,ROLE_USER vistor=123,disabled,ROLE_USER </value> </property> --> <!-- 将用户信息和权限信息保存于Java的属性文件中 --> <property name="userProperties"> <bean class="org.springframework.beans.factory.config.PropertiesFactoryBean"> <property name="location" value="/WEB-INF/users.properties" /> </bean> </property> </bean> <!-- RememberMeProcessingFilter 将Authentication中的用户名和密码保存在客户端Cookie的过滤器 使用Cookie保存用户登陆信息,必须考虑以下安全问题: 1、Cookie是易受攻击的,多用户共享浏览器和垮站点脚本攻击都可能使Cookie失窃。 2、一切可以从Cookie中反推出密码明文的存储方式都是不可接受的。 3、必须将客户端的IP绑定在Cookie中,这样即使Cookie失窃,也不可能在其他的机器上使用。 4、使用Cookie登陆,意味着用户可以不经过显示登陆的方式,获取正常登陆的一切权限。 Acegi Remember-Me中最关键的三个问题: 1、在用户登陆的时候,获取用户名和密码等信息,将其以一定的方式保存到Cookie中。 2、在Cookie的有效期内,当用户访问站点的安全页面时,自动进行登陆。 3、必须提供一个功能,让用户可以手工清除Remember-Me Cookie。 Remeber-Me 中涉及的类和接口: RememberMeServices:该接口是Remember-Me方案中最关键的接口 * void loginSucess(HttpServletRequest req, HttpServletResponse res, Authentication successfulAuthencation) 登陆成功后调用该方法,将用户名和密码保存到Cookie中。 * void loginFail(HttpServletRequest req, HttpServletResponse res)登陆失败后调用该方法 * Authentication autoLogin(HttpServletRequest req, HttpServletResponse res) 从Cookie中自动获取用户名和密码进行自动登陆。 * loginSucess()和loginFail()方法的调用到编制到Acegi的AbstractProcessingFilter抽象过滤器中,这意味着任何 注入了RememberMeServices实例的过滤器都会以适合的方式调用这两个方法。而autoLogin()方法则通过RememberMeProcessingFilter 调用,当RememberMeProcessingFilter发现SecurityContextHolder中不存在有效的Authentication时,autoLogin() 方法自动调用。 Acegi为RememberMeServices接口提供两个实现类: 1、NullRememberMeServices:类似于适配器的实现类,它不做任何有意义的事情,这是AbstractProcessingFilter默认的实现类。 2、TokenBaseRememberMeServices:基于凭证(一般指用户名和密码)的Remember-Me实现类,它真实的实现了接口中的方法。 Acegi通过“_acegi_security_remember_me”的参数值来判断用户是否使用Rememer-Me的功能。 --> <bean id="rememberMeProcessingFilter" class="org.acegisecurity.ui.rememberme.RememberMeProcessingFilter"> <!-- 根据Cookie中的用户信息获得对应的UserDetails,进而重现Authentication --> <property name="authenticationManager" ref="authenticationManager" /> <property name="rememberMeServices" ref="rememberMeServices" /> </bean> <bean id="rememberMeServices" class="org.acegisecurity.ui.rememberme.TokenBasedRememberMeServices"> <!-- Cookie有效时间,单位为秒,默认值是两个星期 --> <property name="tokenValiditySeconds" value="432000" /> <property name="userDetailsService" ref="userDetailsService" /> <!-- 保存在Cookie中的键值 --> <property name="key" value="acegicookie"></property> </bean> <!-- LogoutFilter 退出系统的后置过滤器 因为用户的安全信息通过SecurityContext保存在HttpSession中,故当用户退出系统时必须将其清除;当用户退出系统时常常需要 执行一些相关的操作,如记录用户退出系统的日志,将登陆信息保存到Cookie中的。该过滤器就是为了完成上述任务。 退出系统的过滤器需要知道一下三方面的信息: 1、哪一个URL是退出系统的HTTP请求,通过“filterProcessesUrl”属性指定。默认的为:“/j_acegi_logout”。 2、退出系统前需要执行那些操作及需要执行那些处理器。需要执行的处理器必须实现LogoutHolder接口。Aceig提供两个实现类: * SecuritContextLogoutHolder,该处理器将SecurityContext从HttpSession中删除。 * TokenBaseRememberMeServices,该处理器将Authentication中的用户名和密码保存到客户端的Cookie中。 3、退出系统后转向哪个URL,通过构造函数指定。 --> <bean id="logoutFilter" class="org.acegisecurity.ui.logout.LogoutFilter"> <!-- 指定退出系统后转向的URL --> <constructor-arg value="/acegilogin.jsp" /> <!-- 退出系统前需要执行的处理器 --> <constructor-arg> <list> <!-- 将Remember-Me Cookie中的用户信息清除,我的理解为这样做并不合适 --> <ref bean="rememberMeServices"/> <!-- 该处理器将SecurityContext从HttpSession中删除 --> <bean class="org.acegisecurity.ui.logout.SecurityContextLogoutHandler" /> </list> </constructor-arg> </bean> <!-- ExceptionTranslationFilter 异常转换过滤器 过滤器在过滤器链中的配置必须在FilterSecurityInterceptor之前。过滤器主要拦截登陆异常和越权访问异常。 该过滤器的属性说明: 1、authenticationEntryPoint:表示如果未通过身份认证引发的异常,就将请求导向到该入口。 2、accessDeniedHandler:表示如果用户越权访问,就将请求导向到该入口。 --> <bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter"> <property name="authenticationEntryPoint"> <bean class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"> <property name="loginFormUrl" value="/acegilogin.jsp" /> <property name="forceHttps" value="false" /> </bean> </property> <property name="accessDeniedHandler"> <bean class="org.acegisecurity.ui.AccessDeniedHandlerImpl"> <property name="errorPage" value="/acegilogin.jsp"></property> </bean> </property> </bean> </beans>
- acegidemo.rar (3.6 MB)
- 下载次数: 53
发表评论
-
集合 List 分页算法
2014-11-06 15:48 3440import java.util.ArrayList; ... -
Apache CXF 第一篇:HelloWorld
2012-09-01 22:10 43211、开发环境:JDK 1.6,Spring 2.0,LZ使用A ... -
升级GWT 2.3.0后,编译和调试模式的变化(属个人备忘,非详细)
2011-08-23 13:24 1999属个人备忘,非详细。 1、编译的变化: 编译时,由过去 ... -
SWT/JFace AbstractTableViewer 分页
2011-01-21 07:12 4606本文主要介绍JFace AbstractTableViewer ... -
SWT/JFace 扩展ApplicationWindow的StatusLineManager
2011-01-21 06:52 4978在使用JFace时,如果继承ApplicationWindow ... -
SWT 扩展组件 Eclipse Nebula
2011-01-21 06:32 4756SWT 工具包为运行 SWT 的操作系统的原生窗口部件(nat ... -
JFace ToolBarManager 显示图片和文字
2010-12-23 00:38 2321使用JFace中的ApplicationWindow构造Too ... -
花最少的时间了解Struts 2
2009-11-25 11:18 15521. Struts 优缺点 Struts自20 ... -
REST是一种设计风格而不是一个标准
2009-07-19 21:04 1705转载自:维基百科(http ... -
规则引擎 Drools(JBoss Rules)简介
2009-07-12 00:31 3345Drools(JBoss Rules )具有一个易于访 ... -
Maven 简介
2009-06-23 23:08 1221Maven是基于项目对象模型(POM),可以通过一小段 ... -
复制文件夹程序
2009-06-12 00:57 1275今天有朋友问我这个问题,以前学的时候貌似也没写过,所以试试刀, ... -
JDK 5.0 自带线程池学习
2009-06-03 22:12 3106根据《精通Spring企业应用开发详解》中Concurrent ... -
Acegi 各种加密方式详解
2008-11-24 01:20 2643Acegi 对于密码提供三种方式:明文及不采用任何加密方式、M ... -
Acegi 概述
2008-11-23 21:08 1776最近根据《Spring2.x 企业应用开发详解》书中对于Ace ... -
Java 实现MD5 加密
2008-08-27 19:56 2137package org.hb.online.core.ut ... -
Hibernate的优化策略
2008-07-24 22:31 1970Hibernate性能调优(转载--作者:Robbin Fan ...
相关推荐
本软件压缩包内附acegi的相关使用说明,acegi-security-1.0.6.jar包,TSQL语言等; <br>acegi初级使用者的良好桥梁,让你从零基础学会对acegi的相关配置及简单使用(需要对SSH的搭建有所了解); <br>真正高效的acegi...
将acegi和cas的war包修改并整合测试,里面包含所需依赖包。经过分卷压缩一共3个文件.
而"Acegi 数据库配置安全策略 源代码及图解"很可能是详细的源代码示例和配套的说明文档,展示了如何配置Acegi以连接到数据库,设置用户角色,以及如何实施细粒度的访问控制策略。 通过学习这个压缩包中的内容,...
由于文章内容是关于acegi pdf学习的参考文档,其中包含了大量关于Acegi安全系统的技术细节,因此以下将详细阐述文档中提及的关键知识点。 首先,Acegi安全系统是一个基于Spring框架的安全解决方案。文档开头简要...
通常,这种文档会包含实际的代码示例、配置说明以及可能出现的问题和解决方案。由于无法直接查看文档内容,建议下载并阅读这份文档以获取更深入的理解。 总之,Spring Security(前身Acegi Security)是Spring框架...
本文将深入探讨如何利用Acegi来增强基于Spring的应用程序的安全性,并结合给定的资源进行详细说明。 一、Acegi Security概述 Acegi Security(现为Spring Security)是一个全面且高度可配置的安全框架,它提供了...
将acegi和cas的war包修改并整合测试,里面包含所需依赖包。经过分卷压缩一共3个文件.
而"springframework-license.txt"文件则是Spring框架的许可证文本,详细说明了该软件的使用许可条款和版权信息,遵循Apache License 2.0开源协议。 在实际应用中,为了正确使用这个jar.zip包,你需要: 1. **理解...
压缩包内的“集成ACEGI 进行权限控制详细介绍”很可能是详细说明如何在项目中集成和配置ACEGI Security的文档。这个文档可能涵盖了从添加依赖、配置安全设置到编写自定义逻辑的所有步骤,是学习和实践ACEGI ...
将acegi和cas的war包修改并整合测试,里面包含所需依赖包。经过分卷压缩一共3个文件.
- **配置**:详细说明如何配置表单身份验证机制,包括登录页面的定制和错误处理逻辑。 通过以上详细的内容介绍,我们可以看到Spring Security不仅仅是一个简单的认证与授权工具,它还提供了丰富的功能集来满足企业...
8. license.txt、readme.txt和notice.txt:这些文件分别包含了框架的许可协议、使用说明和版权信息,对于理解Acegi Security的使用权限和限制至关重要。 Acegi Security的设计理念是将安全性融入到应用程序的开发...
标题与描述均提到了“Spring Security 2 配置说明”,这表明文章旨在阐述Spring Security 2版本的配置细节,尤其是对于那些希望深入了解并正确应用该框架的安全特性开发者们。以下将基于给定的部分内容,深入解析...
而"springframework-license.txt"文件则是Spring框架的许可证文件,它详细说明了Spring框架的许可条款和版权信息。通常,开源项目会提供这样的文件,以确保用户了解和遵守其开源协议,比如Apache License、GPL或者...
"springframework-license.txt"文件则可能是Spring框架的许可协议,详细说明了使用Spring框架的法律条款和条件。在使用任何开源软件时,了解并遵守其许可协议是至关重要的,这确保了开发者不会违反版权法规。 在...
"springframework-license.txt"文件则通常包含的是Apache软件基金会或其他开源许可证的文本,说明了Acegi Security的许可条件和使用限制。在开源项目中,理解许可证是非常重要的,因为它决定了你可以在哪些条件下...