⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 acegi例子配置信息讲解(转) - 懒散狂徒的专栏 - csdnblog.htm

📁 acegi+spring最新的分析
💻 HTM
📖 第 1 页 / 共 4 页
字号:
  <LI class=listitem><A href="http://www.smatrix.org/bbs/" 
  target=_self>安全矩阵论坛</A>
  <LI class=listitem><A 
  href="http://blog.csdn.net/hongbo781202/category/24820.aspx" 
  target=_blank>工作流</A>
  <LI class=listitem><A href="http://blog.csdn.net/daryl715" 
  target=_blank>我的世界我的梦</A>
  <LI class=listitem><A href="http://hexun.com/lvaiping/default.html" 
  target=_blank>象象的小窝</A></LI></UL>
<H3 class=listtitle>Web技术类</H3>
<UL class=list>
  <LI class=listitem><A href="http://blog.csdn.net/HuDon" 
  target=_self>ACEGI学习</A>
  <LI class=listitem><A href="http://www.chinaitlab.com/www/techspecial/struts/" 
  target=_blank>Struts</A>
  <LI class=listitem><A href="http://www.blogjava.net/max" 
  target=_blank>STRUTS2</A>
  <LI class=listitem><A href="http://tag.csdn.net/tag/struts2.xml" 
  target=_blank>struts2文档</A>
  <LI class=listitem><A 
  href="http://www.blogjava.net/rickhunter/articles/103481.html" 
  target=_self>struts-spring-hibernate</A>
  <LI class=listitem><A href="http://www.w3pop.com/tech/" 
  target=_blank>网络技术系统知识库</A>
  <LI class=listitem><A href="http://www.blogjava.net/calvin" 
  target=_self>花钱的年华(Spring)</A></LI></UL>
<H3 class=listtitle>工具书下载</H3>
<UL class=list>
  <LI class=listitem><A href="http://man.lupaworld.com/" 
  target=_blank>手册中心(linux和Java)</A></LI></UL>
<H3 class=listtitle>存档</H3>
<UL class=list>
  <LI><A 
  href="http://blog.csdn.net/anyoneking/archive/2007/11.aspx">2007年11月(4)</A>
  <LI><A 
  href="http://blog.csdn.net/anyoneking/archive/2007/10.aspx">2007年10月(17)</A>
  <LI><A 
  href="http://blog.csdn.net/anyoneking/archive/2007/09.aspx">2007年09月(14)</A>
  <LI><A 
  href="http://blog.csdn.net/anyoneking/archive/2007/08.aspx">2007年08月(22)</A>
  <LI><A 
  href="http://blog.csdn.net/anyoneking/archive/2007/07.aspx">2007年07月(34)</A>
  <LI><A 
  href="http://blog.csdn.net/anyoneking/archive/2007/06.aspx">2007年06月(10)</A>
  <LI><A 
  href="http://blog.csdn.net/anyoneking/archive/2007/05.aspx">2007年05月(17)</A>
  <LI><A 
  href="http://blog.csdn.net/anyoneking/archive/2007/04.aspx">2007年04月(55)</A></LI></UL><SPAN 
id=Anthem_RecentComments_ltlComments__><SPAN id=RecentComments_ltlComments>
<H3 class=listtitle>最近评论</H3>
<UL class=list>
  <LI class=listitem>erway:<A title=点击查看《回复:dwr配置文件dwr.xml详解》 
  href="http://blog.csdn.net/anyoneking/archive/2007/10/31/1859749.aspx#739597">尊敬的老师:您好!<BR><BR>很荣幸能在CSDN上认识您,也非常高兴您对Groony感兴趣。<BR><BR>我是人民邮电出版社图灵公司的编辑杨福川,图灵公司最近引进了《Groovy 
  in 
  Action》一书,希望您能帮忙翻译。如果您对翻译此书感兴趣,敬请您收到留言后与我联系,谢谢。<BR><BR>我的联系方式如下:<BR><BR>E-mail:yangfc……</A>
  <LI class=listitem>efan101:<A title=点击查看《回复:DB2常用命令大全》 
  href="http://blog.csdn.net/anyoneking/archive/2007/08/03/1723860.aspx#727031">初学者最爱!顶一下</A>
  <LI class=listitem>efan101:<A title=点击查看《回复:db2字符串的有关函数和具体用法》 
  href="http://blog.csdn.net/anyoneking/archive/2007/08/02/1722934.aspx#727030">非常有用,顶!</A>
  <LI class=listitem>bibi:<A title=点击查看《回复:db2字符串的有关函数和具体用法》 
  href="http://blog.csdn.net/anyoneking/archive/2007/08/02/1722934.aspx#725189">CHARINDEX函数是DB2里的吗?</A>
  <LI class=listitem>figo:<A title=点击查看《回复:ACEGI标签及其扩展》 
  href="http://blog.csdn.net/anyoneking/archive/2007/08/21/1752951.aspx#722756">yue 
  lai yue fu zai</A></LI></UL></SPAN></SPAN><BR><BR></DIV>
<DIV id=main>
<DIV class=Tag>
<SCRIPT language=javascript 
src="Acegi例子配置信息讲解(转) - 懒散狂徒的专栏 - CSDNBlog.files/urltag.aspx"></SCRIPT>

<DIV style="CLEAR: both"></DIV></DIV><SPAN class=PreAndNext 
id=viewpost.ascx_PreviousAndNextEntriesUp>
<DIV align=center><A 
href="http://blog.csdn.net/anyoneking/archive/2007/08/20/1751804.aspx">上一篇:&nbsp;Acegi框架介绍</A>&nbsp;|&nbsp;<A 
href="http://blog.csdn.net/anyoneking/archive/2007/08/17/1748509.aspx">下一篇:&nbsp;acegi安全系统标准配置指南草案</A></DIV></SPAN><BR>
<SCRIPT>function StorePage(){d=document;t=d.selection?(d.selection.type!='None'?d.selection.createRange().text:''):(d.getSelection?d.getSelection():'');void(keyit=window.open('http://www.365key.com/storeit.aspx?t='+escape(d.title)+'&u='+escape(d.location.href)+'&c='+escape(t),'keyit','scrollbars=no,width=475,height=575,left=75,top=20,status=no,resizable=yes'));keyit.focus();}</SCRIPT>

<DIV class=post>
<DIV class=postTitle>
<SCRIPT src="Acegi例子配置信息讲解(转) - 懒散狂徒的专栏 - CSDNBlog.files/vote.js"></SCRIPT>
<A href="http://blog.csdn.net/anyoneking/archive/2007/08/20/1751617.aspx"><IMG 
height=13 src="Acegi例子配置信息讲解(转) - 懒散狂徒的专栏 - CSDNBlog.files/zhuan.gif" width=15 
border=0>&nbsp;Acegi例子配置信息讲解(转)</A>&nbsp;&nbsp;
<SCRIPT src="Acegi例子配置信息讲解(转) - 懒散狂徒的专栏 - CSDNBlog.files/count.htm"></SCRIPT>
 </DIV>
<DIV class=postText>
<P><SPAN><SPAN lang=EN-US><FONT face=Arial>1. 概述 
<BR>Acegi是一个专门为SpringFramework应用提供安全机制的开放源代码项目,全称为Acegi Security System for 
Spring,当前版本为 <BR>0.8.3。它使用了Spring的方式提供了安全和认证安全服务,包括使用Bean 
Context,拦截器和面向接口的编程方式。通过精心 
<BR>配置Acegi安全系统能够轻松地适用于复杂的安全需求。它既能应用于WEB应用也能应用于非WEB应用。在 本文的示例程序 
<BR>里,我将演示如何将Acegi应用于WEB应用程序。通过这个例子详细介绍如何配置Acegi的各个组件,同时介绍如何扩展Acegi 
<BR>使其能够从数据库中读取配置信息。</FONT></SPAN></SPAN></P>
<P><SPAN><SPAN lang=EN-US><FONT face=Arial><FONT face=Arial>2. 例子说明 
<BR>本文的例子是一个联系人管理程序,使用SpringFramework 1.2.4 和 Acegi0.8.3,数据库采用Mysql。程序的目录结构如下:   
<BR>acegi-sample <BR>│ contactadd.jsp//增加联系人页面 <BR>│ contactedit.jsp//编辑联系人页面 
<BR>│ contactlist.jsp//联系人列表页面 <BR>│ contactmainterance.jsp//联系人操作页面 <BR>│ 
index.jsp//主页面 <BR>│ login.jsp//登录页面 <BR>│ logoff.jsp//登出页面 <BR>│<BR>├─WEB-INF 
<BR>│ │ web.xml <BR>│ │ applicationContext-basic.xml <BR>│ │ 
applicationContext-security-acegi.xml <BR>│ │ log4j.properties <BR>│ │ <BR>│ 
├─src <BR>│ │ └─sample//java代码目录 <BR>│ ├─classes <BR>│ └─lib//依赖包目录 
<BR>└─db//建表脚本目录 </FONT></FONT></SPAN></SPAN></P>
<P><SPAN><SPAN lang=EN-US><FONT face=Arial>3.配置文件说明 
<BR>接下来,我们将进入本文的重要内容,开始对Acegi应用程序所牵涉到的配置文件进行一一说明。 
</FONT></SPAN></SPAN></P><SPAN><SPAN lang=EN-US><FONT face=Arial>3.1 web.xml 
<BR>首先声明SpringFramework的配置文件列表。为了便于管理,将业务方法相关的配置文件和Acegi安全配置相关的配置文件分 <BR>开。   
<BR><BR>&nbsp;<CONTEXT-PARAM></CONTEXT-PARAM> 
<BR><PARAM-NAME></PARAM-NAME>contextConfigLocation 
<BR><PARAM-VALUE></PARAM-VALUE><BR>/WEB-INF/applicationContext-basic.xml 
<BR>/WEB-INF/applicationContext-security-acegi.xml <BR><BR><BR>其次声明Acegi过滤器。   
<BR>&lt;!--Acegi Filter Chain Proxy 
--&gt;<BR><FILTER></FILTER><BR><FILTER-NAME></FILTER-NAME>Acegi Filter Chain 
Proxy 
<BR><FILTER-CLASS></FILTER-CLASS>net.sf.acegisecurity.util.FilterToBeanProxy 
<BR><INIT-PARAM></INIT-PARAM><BR><PARAM-NAME></PARAM-NAME>targetClass 
<BR><PARAM-VALUE></PARAM-VALUE>net.sf.acegisecurity.util.FilterChainProxy 
<BR><BR><BR><FILTER-MAPPING></FILTER-MAPPING><BR><FILTER-NAME></FILTER-NAME>Acegi 
Filter Chain Proxy <BR><URL-PATTERN></URL-PATTERN>/* 
<BR><BR>说明:Acegi对WEB应用的支持主要是依靠servlet 过滤器(filter) 来实现的。每一个http 
request都将被这些过滤器层层拦截 并 
<BR>进行安全处理(包括认证和授权)。针对不同的安全处理,Acegi提供了不同的过滤器。过滤器的配置信息位于web.xml,但是 
<BR>我们又希望把Acegi的过滤器配置信息放在SpringFramework的配置文件里(applicationContext-security-acegi.xml),从而实现对 
<BR>这些过滤器的“控制反转”。解决这个问题的方法是采用Acegi提供的FilterToBeanProxy。FilterToBeanProxy顾名思义就是对 
<BR>Acegi过滤器Bean的代理,它的主要功能就是将http请求依次分派给对应的过滤器Bean。 <BR>3.2 
applicationContext-security-acegi.xml 
<BR>applicationContext-security-acegi.xml主要包括认证相关配置信息和WEB资源授权配置信息。首先是声明过滤器序列。   
<BR><BEAN class=net.sf.acegisecurity.util.FilterChainProxy 
id=filterChainProxy></BEAN><BR><property 
name="filterInvocationDefinitionSource"><BR><VALUE></VALUE><BR>CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON 
<BR>PATTERN_TYPE_APACHE_ANT 
<BR>/**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,anonymousProcessingFilter,securityEnforcementFilter 
<BR><BR></property><BR><BR>各个过滤器的作用如下: <BR>httpSessionContextIntegrationFilter 
<BR>根据session中存放的信息组装ContextHolder。ContextHolder主要用于存放SecureContext, 
<BR>包括用户的权限信息 <BR>authenticationProcessingFilter 处理认证请求(通常是一个登录页面的表单请求) 
<BR><BR>anonymousProcessingFilter 
<BR>匿名用户处理。如果用户尚未登录,将生成一个匿名用户的Authentication存放到 <BR>ContextHolder中 
<BR>securityEnforcementFilter 强制安全验证过滤器。验证所请求的url是否在用户的权限范围内。 <BR>3.2.1 
httpSessionContextIntegrationFilter相关配置信息 <BR> <BR><BEAN 
class=net.sf.acegisecurity.context.HttpSessionContextIntegrationFilter 
id=httpSessionContextIntegrationFilter></BEAN><BR><property 
name="context"><VALUE></VALUE>net.sf.acegisecurity.context.security.SecureContextImpl</property><BR><BR>说明: 
context属性指定context的实现类。 <BR>3.2.2 authenticationProcessingFilter相关配置信息 
<BR>authenticationProcessingFilter的配置比较复杂,我们通过下图来看一下: 
<BR>authenticationProcessingFilter配置说明: <BR><BR>authenticationManager 认证管理器 
<BR>authenticationFailureUrl 认证失败后,重定向的url <BR>defaultTargetUrl 认证成功后,重定向的url 
<BR>filterProcessesUrl 
<BR>该过滤器拦截的url,通常是/j_acegi_security_check,和登录页面(login.jsp)的登录表单的action相 <BR>同 
<BR>authenticationManager(认证管理器)用于管理AuthenticationProvider(认证提供者)。它的作用是使你能够通过多个不同的认 
<BR>证管理源来对用户进行认证。认证管理器将依次调用认证提供者的认证方法,直到认证通过。本程序使用两种认证提供者。 
<BR>authenticationManager配置说明: <BR>daoAuthenticationProvider 基于数据库的认证提供者。 
<BR>anonymousAuthenticationProvider 用于认证匿名用户。 
<BR>daoAuthenticationProvider主要功能是从数据库取出用户名和密码,判断登录信息是否正确,如果是,则取出用户权限等用户 
<BR>信息,并且存放到cache中,以便以后再次使用。具体流程可以参考:DaoAuthenticationProvider的authenticate方法。 
<BR>daoAuthenticationProvider配置说明: <BR>authenticationDao 
认证数据访问对象,用于获取用户信息,包括:用户名,用户密码,用户状态和用户权限。 <BR>userCache 用户信息cache实现bean 
<BR>jdbcDaoImpl是认证数据访问对象,它能够从默认的数据库结构中获取用户信息,由于Acegi默认的数据库结构和本程序的不 
<BR>同,因此需要修改jdbcDaoImpl的默认sql。注意,采用这种方式能够使Acegi很好的兼容旧的应用程序,因为它对底层的数据结 
<BR>构并没有强制要求。jdbcDaoImpl配置说明: <BR>dataSource 数据源bean <BR>usersByUsernameQuery 
用户信息查询sql <BR>authoritiesByUsernameQuery 用户权限查询sql 
<BR>userCache用于定义用户信息cache功能的提供者。userCache配置说明: <BR>cache 定义ehcache工厂bean 
<BR>本程序采用ehcache作为cache实现。由于认证管理器在每次对http请求进行认证之前都会查找用户信息,通过使用cache就可以 
<BR>避免每次都重复访问数据库。 <BR>3.2.3 anonymousProcessingFilter相关配置信息: <BR><property 
name="key"><VALUE></VALUE>foobar</property><BR><property 
name="userAttribute"><VALUE></VALUE>anonymousUser,AUTH_ANONYMOUS</property><BR>说明:anonymousProcessingFilter的作用是判断ContextHolder中是否有Authentication对象,如果没有就创建一个Authentication对 
<BR>象,其中包含的用户名是anonymousUser,用户权限是AUTH_ANONYMOUS。这使得没有登录的匿名用户能够自动的获得匿 
<BR>名的用户名和权限。 <BR>3.2.4 securityEnforcementFilter相关配置信息 
<BR><BR>securityEnforcementFilter的配置比较复杂</FONT></SPAN></SPAN><SPAN><SPAN 
lang=EN-US><FONT face=Arial><BR>securityEnforcementFilter配置说明: 
<BR>filterSecurityInterceptor 实现对URL资源进行授权访问。 <BR>authenticationEntryPoint 
配置登录界面信息。 
<BR>securityEnforcementFilter的作用主要是将http请求转发给filterSecurityInterceptor,由filterSecurityInterceptor来对HTTP请求的合法 
<BR>性进行判断。 <BR>filterInvocationInterceptor配置说明: <BR>authenticationManager 认证管理器 
<BR>accessDecisionManager 投票通过策略管理器 <BR>objectDefinitionSource 
<BR>URL的权限配置信息。用于指定不同的URL资源对应的权限。配置如下: <BR>/**/*.jpg=AUTH_ANONYMOUS,AUTH_USER 
<BR>/**/*.gif=AUTH_ANONYMOUS,AUTH_USER <BR>/**/*.png=AUTH_ANONYMOUS,AUTH_USER 
<BR>/login.jsp*=AUTH_ANONYMOUS,AUTH_USER <BR>/**=AUTH_USER 
<BR>以上配置指定AUTH_ANONYMOUS权限的用户(即匿名用户)只可以访问图片资源和登录页 
<BR>面,AUTH_USER权限的用户可以访问全部WEB资源。 
<BR>accessDecisionManager(访问决策管理器)首先通过authenticationManager判断用户是否通过认证(即是否已经登录),然后根 
<BR>据objectDefinitionSource的配置信息调用accessDecisionManager对用户权限进行投票。 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -