目录
在applicationContext-acegi-security.xml中
2.2.3 HTTP安全请求
2.2.4 方法调用安全控制
3 Jcaptcha验证码
首页 数据库 mysql教程 Acegi 的配置(2)

Acegi 的配置(2)

Jun 07, 2016 pm 03:30 PM
配置

在applicationContext-acegi-security.xml中 1.FILTER CHAIN FilterChainProxy会按顺序来调用这些filter,使这些 filter能享用Spring ioc的功能, CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON定义了url比较前先转为小写, PATTERN_TYPE_APACHE_ANT定义了使用A

在applicationContext-acegi-security.xml中

1.FILTER CHAIN

  FilterChainProxy会按顺序来调用这些filter,使这些 filter能享用Spring ioc的功能, CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON定义了url比较前先转为小写, PATTERN_TYPE_APACHE_ANT定义了使用Apache ant的匹配模式

    <bean id="filterChainProxy" class="org.acegisecurity.util.FilterChainProxy"><br>        <property name="filterInvocationDefinitionSource"><br>            <value><br>                CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON<br>                PATTERN_TYPE_APACHE_ANT<br>               /**=httpSessionContextIntegrationFilter,authenticationProcessingFilter,<br>basicProcessingFilter,rememberMeProcessingFilter,anonymousProcessingFilter,<br> exceptionTranslationFilter,filterInvocationInterceptor<br>            </value><br>        </property><br>    </bean>
登录后复制
2.基础认证

1) authenticationManager
  起到认 证管理的作用,它将验证的功能委托给多个Provider,并通过遍历Providers, 以保证获取不同来源的身份认证,若某个Provider能成功确认当前用户的身份,authenticate()方法会返回一个完整的包含用户授权信息的 Authentication对象,否则会抛出一个AuthenticationException。
Acegi提供了不同的AuthenticationProvider的实现,如:
        DaoAuthenticationProvider 从数据库中读取用户信息验证身份
        AnonymousAuthenticationProvider 匿名用户身份认证
        RememberMeAuthenticationProvider 已存cookie中的用户信息身份认证
        AuthByAdapterProvider 使用容器的适配器验证身份
        CasAuthenticationProvider 根据Yale中心认证服务验证身份, 用于实现单点登陆
        JaasAuthenticationProvider 从JASS登陆配置中获取用户信息验证身份
        RemoteAuthenticationProvider 根据远程服务验证用户身份
        RunAsImplAuthenticationProvider 对身份已被管理器替换的用户进行验证
        X509AuthenticationProvider 从X509认证中获取用户信息验证身份
        TestingAuthenticationProvider 单元测试时使用

        每个认证者会对自己指定的证明信息进行认证,如DaoAuthenticationProvider仅对UsernamePasswordAuthenticationToken这个证明信息进行认证。

<bean id="authenticationManager" class="org.acegisecurity.providers.ProviderManager"><br>        <property name="providers"><br>            <list><br>                <ref local="daoAuthenticationProvider"></ref><br>                <ref local="anonymousAuthenticationProvider"></ref><br>                <ref local="rememberMeAuthenticationProvider"></ref><br>            </list><br>        </property><br></bean>
登录后复制


2) daoAuthenticationProvider
   进行简单的基于数据库的身份验证。DaoAuthenticationProvider获取数据库中的账号密码并进行匹配,若成功则在通过用户身份的同 时返回一个包含授权信息的Authentication对象,否则身份验证失败,抛出一个AuthenticatiionException。

    <bean id="daoAuthenticationProvider" class="org.acegisecurity.providers.dao.DaoAuthenticationProvider"><br>        <property name="userDetailsService" ref="jdbcDaoImpl"></property><br>        <property name="userCache" ref="userCache"></property><br>        <property name="passwordEncoder" ref="passwordEncoder"></property><br>   </bean>
登录后复制


3) passwordEncoder
  使用加密器对用户输入的明文进行加密。Acegi提供了三种加密器:
PlaintextPasswordEncoder—默认,不加密,返回明文.
ShaPasswordEncoder—哈希算法(SHA)加密
Md5PasswordEncoder—消息摘要(MD5)加密

<bean id="passwordEncoder" class="org.acegisecurity.providers.encoding.Md5PasswordEncoder"></bean>
登录后复制


4) jdbcDaoImpl
   用于在数据中获取用户信息。 acegi提供了用户及授权的表结构,但是您也可以自己来实现。通过usersByUsernameQuery这个SQL得到你的(用户ID,密码,状态 信息);通过authoritiesByUsernameQuery这个SQL得到你的(用户ID,授权信息)

 <bean id="jdbcDaoImpl" class="org.acegisecurity.userdetails.jdbc.JdbcDaoImpl"><br>        <property name="dataSource" ref="dataSource"></property><br>        <property name="usersByUsernameQuery"><br>            <value>select loginid,passwd,1 from users where loginid = ?</value><br>        </property><br>        <property name="authoritiesByUsernameQuery"><br>            <value>select u.loginid,p.name from users u,roles r,permissions p,user_role ur,role_permis rp where u.id=ur.user_id and r.id=ur.role_id and p.id=rp.permis_id and<br>                r.id=rp.role_id and p.status='1' and u.loginid=?</value><br>        </property><br></bean>
登录后复制

5) userCache &  resourceCache
  缓存用户和资源相对应的权限信息。每当请求一个受保护资源时,daoAuthenticationProvider就会被调用以获取用户授权信息。如果每次都从数据库获取的话,那代价很高,对于不常改变的用户和资源信息来说,最好是把相关授权信息缓存起来。(详见 2.6.3 资源权限定义扩展 )
userCache提供了两种实现: NullUserCache和EhCacheBasedUserCache, NullUserCache实际上就是不进行任何缓存,EhCacheBasedUserCache是使用Ehcache来实现缓功能。

    <bean id="userCacheBackend" class="org.springframework.cache.ehcache.EhCacheFactoryBean"><br>        <property name="cacheManager" ref="cacheManager"></property><br>        <property name="cacheName" value="userCache"></property><br>    </bean><br>    <bean id="userCache" class="org.acegisecurity.providers.dao.cache.EhCacheBasedUserCache" autowire="byName"><br>        <property name="cache" ref="userCacheBackend"></property><br>      </bean><br>    <bean id="resourceCacheBackend" class="org.springframework.cache.ehcache.EhCacheFactoryBean"><br>        <property name="cacheManager" ref="cacheManager"></property><br>        <property name="cacheName" value="resourceCache"></property><br>    </bean><br>    <bean id="resourceCache" class="org.springside.modules.security.service.acegi.cache.ResourceCache" autowire="byName"><br>        <property name="cache" ref="resourceCacheBackend"></property><br>    </bean>
登录后复制


6) basicProcessingFilter
   用于处理HTTP头的认证信息,如从Spring远程协议(如Hessian和Burlap)或普通的浏览器如IE,Navigator的HTTP头中 获取用户信息,将他们转交给通过authenticationManager属性装配的认证管理器。如果认证成功,会将一个Authentication 对象放到会话中,否则,如果认证失败,会将控制转交给认证入口点(通过authenticationEntryPoint属性装配)

    <bean id="basicProcessingFilter" class="org.acegisecurity.ui.basicauth.BasicProcessingFilter"><br>        <property name="authenticationManager" ref="authenticationManager"></property><br>        <property name="authenticationEntryPoint" ref="basicProcessingFilterEntryPoint"></property><br>    </bean>
登录后复制

7) basicProcessingFilterEntryPoint
  通过向浏览器发送一个HTTP401(未授权)消息,提示用户登录。
处理基于HTTP的授权过程, 在当验证过程出现异常后的"去向",通常实现转向、在response里加入error信息等功能。

 <bean id="basicProcessingFilterEntryPoint" class="org.acegisecurity.ui.basicauth.BasicProcessingFilterEntryPoint"><br>        <property name="realmName" value="SpringSide Realm"></property><br></bean>
登录后复制

8) authenticationProcessingFilterEntryPoint
   当抛出AccessDeniedException时,将用户重定向到登录界面。属性loginFormUrl配置了一个登录表单的URL,当需要用户 登录时,authenticationProcessingFilterEntryPoint会将用户重定向到该URL

 <bean id="authenticationProcessingFilterEntryPoint" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint"><br>        <property name="loginFormUrl"><br>            <value>/security/login.jsp</value><br>        </property><br>        <property name="forceHttps" value="false"></property><br></bean>
登录后复制

2.2.3 HTTP安全请求

1) httpSessionContextIntegrationFilter
   每次request前 HttpSessionContextIntegrationFilter从Session中获取Authentication对象,在request完 后, 又把Authentication对象保存到Session中供下次request使用,此filter必须其他Acegi filter前使用,使之能跨越多个请求。

<bean id="httpSessionContextIntegrationFilter" class="org.acegisecurity.context.HttpSessionContextIntegrationFilter"></bean><br>    <bean id="httpRequestAccessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased"><br>        <property name="allowIfAllAbstainDecisions" value="false"></property><br>        <property name="decisionVoters"><br>            <list><br>                <ref bean="roleVoter"></ref><br>            </list><br>        </property><br></bean>
登录后复制


2) httpRequestAccessDecisionManager
   经过投票机制来决定是否可以访问某一资源(URL或方法)。allowIfAllAbstainDecisions为false时如果有一个或以上的 decisionVoters投票通过,则授权通过。可选的决策机制有ConsensusBased和UnanimousBased

    <bean id="httpRequestAccessDecisionManager" class="org.acegisecurity.vote.AffirmativeBased"><br>        <property name="allowIfAllAbstainDecisions" value="false"></property><br>        <property name="decisionVoters"><br>            <list><br>                <ref bean="roleVoter"></ref><br>            </list><br>        </property><br>    </bean>
登录后复制


3) roleVoter
   必须是以rolePrefix设定的value开头的权限才能进行投票,如AUTH_ , ROLE_

    <bean id="roleVoter" class="org.acegisecurity.vote.RoleVoter"><br>        <property name="rolePrefix" value="AUTH_"></property><br>   </bean>
登录后复制

4)exceptionTranslationFilter
  异常转换过滤器,主要是处理AccessDeniedException和AuthenticationException,将给每个异常找到合适的"去向" 

   <bean id="exceptionTranslationFilter" class="org.acegisecurity.ui.ExceptionTranslationFilter"><br>        <property name="authenticationEntryPoint" ref="authenticationProcessingFilterEntryPoint"></property><br>    </bean>
登录后复制

5) authenticationProcessingFilter
  和servlet spec差不多,处理登陆请求.当身份验证成功时,AuthenticationProcessingFilter会在会话中放置一个Authentication对象,并且重定向到登录成功页面
         authenticationFailureUrl定义登陆失败时转向的页面
         defaultTargetUrl定义登陆成功时转向的页面
         filterProcessesUrl定义登陆请求的页面
         rememberMeServices用于在验证成功后添加cookie信息

    <bean id="authenticationProcessingFilter" class="org.acegisecurity.ui.webapp.AuthenticationProcessingFilter"><br>        <property name="authenticationManager" ref="authenticationManager"></property><br>        <property name="authenticationFailureUrl"><br>            <value>/security/login.jsp?login_error=1</value><br>        </property><br>        <property name="defaultTargetUrl"><br>            <value>/admin/index.jsp</value><br>        </property><br>        <property name="filterProcessesUrl"><br>            <value>/j_acegi_security_check</value><br>        </property><br>        <property name="rememberMeServices" ref="rememberMeServices"></property><br>    </bean>
登录后复制

6) filterInvocationInterceptor
   在执行转向url前检查objectDefinitionSource中设定的用户权限信息。首先,objectDefinitionSource中定 义了访问URL需要的属性信息(这里的属性信息仅仅是标志,告诉accessDecisionManager要用哪些voter来投票)。然后, authenticationManager掉用自己的provider来对用户的认证信息进行校验。最后,有投票者根据用户持有认证和访问url需要的 属性,调用自己的voter来投票,决定是否允许访问。

    <bean id="filterInvocationInterceptor" class="org.acegisecurity.intercept.web.FilterSecurityInterceptor"><br>        <property name="authenticationManager" ref="authenticationManager"></property><br>        <property name="accessDecisionManager" ref="httpRequestAccessDecisionManager"></property><br>        <property name="objectDefinitionSource" ref="filterDefinitionSource"></property><br>    </bean>
登录后复制


7) filterDefinitionSource (详见 2.6.3 资源权限定义扩展)
  自定义DBFilterInvocationDefinitionSource从数据库和cache中读取保护资源及其需要的访问权限信息 

<bean id="filterDefinitionSource" class="org.springside.modules.security.service.acegi.DBFilterInvocationDefinitionSource"><br>        <property name="convertUrlToLowercaseBeforeComparison" value="true"></property><br>        <property name="useAntPath" value="true"></property><br>        <property name="acegiCacheManager" ref="acegiCacheManager"></property><br></bean>
登录后复制

2.2.4 方法调用安全控制

(详见 2.6.3 资源权限定义扩展)

1) methodSecurityInterceptor
  在执行方法前进行拦截,检查用户权限信息
2) methodDefinitionSource
  自定义MethodDefinitionSource从cache中读取权限

   <bean id="methodSecurityInterceptor" class="org.acegisecurity.intercept.method.aopalliance.MethodSecurityInterceptor"><br>        <property name="authenticationManager" ref="authenticationManager"></property><br>        <property name="accessDecisionManager" ref="httpRequestAccessDecisionManager"></property><br>        <property name="objectDefinitionSource" ref="methodDefinitionSource"></property><br>    </bean><br>    <bean id="methodDefinitionSource" class="org.springside.modules.security.service.acegi.DBMethodDefinitionSource"><br>        <property name="acegiCacheManager" ref="acegiCacheManager"></property><br>    </bean><br><br><br>
登录后复制

3 Jcaptcha验证码

采用 http://jcaptcha.sourceforge.net 作为通用的验证码方案,请参考SpringSide中的例子,或网上的:
http://www.coachthrasher.com/page/blog?entry=jcaptcha_with_appfuse。

本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

AI Hentai Generator

AI Hentai Generator

免费生成ai无尽的。

热工具

记事本++7.3.1

记事本++7.3.1

好用且免费的代码编辑器

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

禅工作室 13.0.1

禅工作室 13.0.1

功能强大的PHP集成开发环境

Dreamweaver CS6

Dreamweaver CS6

视觉化网页开发工具

SublimeText3 Mac版

SublimeText3 Mac版

神级代码编辑软件(SublimeText3)

PyCharm与PyTorch完美结合:安装配置步骤详解 PyCharm与PyTorch完美结合:安装配置步骤详解 Feb 21, 2024 pm 12:00 PM

PyCharm是一款强大的集成开发环境(IDE),而PyTorch是深度学习领域备受欢迎的开源框架。在机器学习和深度学习领域,使用PyCharm和PyTorch进行开发可以极大地提高开发效率和代码质量。本文将详细介绍如何在PyCharm中安装配置PyTorch,并附上具体的代码示例,帮助读者更好地利用这两者的强大功能。第一步:安装PyCharm和Python

在PyCharm中如何设置Git配置 在PyCharm中如何设置Git配置 Feb 20, 2024 am 09:47 AM

标题:如何在PyCharm中正确配置Git在现代软件开发中,版本控制系统是非常重要的工具,而Git作为其中一种流行的版本控制系统,为开发者提供了强大的功能和灵活的操作。而PyCharm作为一款功能强大的Python集成开发环境,自带了对Git的支持,能够让开发者更加便捷地管理代码版本。本文将介绍如何在PyCharm中正确地配置Git,以便于在开发过程中更好地

Linux系统中GDM的工作原理及配置方法 Linux系统中GDM的工作原理及配置方法 Mar 01, 2024 pm 06:36 PM

标题:Linux系统中GDM的工作原理及配置方法在Linux操作系统中,GDM(GNOMEDisplayManager)是一种常见的显示管理器,用于控制图形用户界面(GUI)登录和用户会话管理。本文将介绍GDM的工作原理和配置方法,以及提供具体的代码示例。一、GDM的工作原理GDM是GNOME桌面环境下的显示管理器,负责启动X服务器并提供登录界面,用户输

了解Linux Bashrc:功能、配置与使用方法 了解Linux Bashrc:功能、配置与使用方法 Mar 20, 2024 pm 03:30 PM

了解LinuxBashrc:功能、配置与使用方法在Linux系统中,Bashrc(BourneAgainShellruncommands)是一个非常重要的配置文件,其中包含了系统启动时自动运行的各种命令和设置。Bashrc文件通常位于用户的家目录下,是一个隐藏文件,它的作用是为用户自定义设置Bashshell的环境。一、Bashrc的功能设置环境

win11系统如何配置工作组 win11系统如何配置工作组 Feb 22, 2024 pm 09:50 PM

Win11系统如何配置工作组工作组是一种在局域网中连接多台计算机的方式,它允许计算机之间共享文件、打印机和其他资源。在Win11系统中,配置工作组非常简单,只需按照以下步骤操作即可。步骤1:打开“设置”应用程序首先,点击Win11系统的“开始”按钮,然后在弹出的菜单中选择“设置”应用程序。你也可以使用快捷键“Win+I”打开“设置”。步骤2:选择“系统”在“设置”应用程序中,你会看到多个选项。请点击“系统”选项,进入系统设置页面。步骤3:选择“关于”在“系统”设置页面中,你会看到多个子选项。请点

避免Maven环境配置常见错误:解决配置问题 避免Maven环境配置常见错误:解决配置问题 Feb 19, 2024 pm 04:56 PM

Maven是Java项目管理和构建工具,被广泛应用于Java项目的开发中。在使用Maven进行项目构建的过程中,往往会遇到一些常见的环境配置问题。本文将针对这些常见问题进行解答,并提供具体的代码示例,帮助读者避免常见的配置错误。1.Maven环境变量配置错误问题描述:在使用Maven时,如果环境变量配置不正确,可能导致Maven无法正常工作。解决方法:确保

简单易懂的PyCharm配置Git教程 简单易懂的PyCharm配置Git教程 Feb 20, 2024 am 08:28 AM

PyCharm是一款常用的集成开发环境(IDE),在日常开发中,使用Git管理代码是必不可少的。本文将介绍如何在PyCharm中配置Git,并使用Git进行代码管理,并附带具体代码示例。第一步:安装Git首先,确保在你的计算机上已经安装了Git。如果没有安装,可以前往[Git官网](https://git-scm.com/)下载并安装最新版本的Git

Linux系统中如何配置和安装FTPS Linux系统中如何配置和安装FTPS Mar 20, 2024 pm 02:03 PM

标题:Linux系统中如何配置和安装FTPS,需要具体代码示例在Linux系统中,FTPS是一种安全的文件传输协议,与FTP相比,FTPS通过TLS/SSL协议对传输的数据进行加密,提高了数据传输的安全性。在本文中,将介绍如何在Linux系统中配置和安装FTPS,并提供具体的代码示例。步骤一:安装vsftpd打开终端,输入以下命令安装vsftpd:sudo

See all articles