目次
在applicationContext-acegi-security.xml中
2.2.3 HTTP安全请求
2.2.4 方法调用安全控制
3 Jcaptcha验证码

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 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

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 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PyCharm と PyTorch の完璧な組み合わせ: 詳細なインストールと構成手順 PyCharm と PyTorch の完璧な組み合わせ: 詳細なインストールと構成手順 Feb 21, 2024 pm 12:00 PM

PyCharm は強力な統合開発環境 (IDE) であり、PyTorch はディープ ラーニングの分野で人気のあるオープン ソース フレームワークです。機械学習とディープラーニングの分野では、開発に PyCharm と PyTorch を使用すると、開発効率とコード品質が大幅に向上します。この記事では、PyCharm に PyTorch をインストールして構成する方法を詳しく紹介し、読者がこれら 2 つの強力な機能をより効果的に活用できるように、具体的なコード例を添付します。ステップ 1: PyCharm と Python をインストールする

LinuxシステムにおけるGDMの動作原理と設定方法 LinuxシステムにおけるGDMの動作原理と設定方法 Mar 01, 2024 pm 06:36 PM

タイトル: Linux システムにおける GDM の動作原理と構成方法 Linux オペレーティング システムでは、GDM (GNOMEDisplayManager) は、グラフィカル ユーザー インターフェイス (GUI) ログインとユーザー セッション管理を制御するために使用される一般的なディスプレイ マネージャーです。この記事では、GDM の動作原理と構成方法を紹介し、具体的なコード例を示します。 1. GDM の動作原理 GDM は GNOME デスクトップ環境のディスプレイ マネージャーであり、X サーバーの起動とログイン インターフェイスの提供を担当します。

PyCharm で Git 構成をセットアップする方法 PyCharm で Git 構成をセットアップする方法 Feb 20, 2024 am 09:47 AM

タイトル: PyCharm で Git を正しく構成する方法 現代のソフトウェア開発において、バージョン管理システムは非常に重要なツールであり、Git は人気のあるバージョン管理システムの 1 つとして、開発者に強力な機能と柔軟な操作を提供します。強力な Python 統合開発環境として、PyCharm には Git のサポートが付属しているため、開発者はコードのバージョンをより簡単に管理できます。この記事では、開発プロセス中により良い開発を促進するために、PyCharm で Git を正しく構成する方法を紹介します。

Linux Bashrc の機能、構成、使用法を理解する Linux Bashrc の機能、構成、使用法を理解する Mar 20, 2024 pm 03:30 PM

Linux Bashrc について: 機能、構成、および使用法 Linux システムでは、Bashrc (BourneAgainShellrunco​​mmands) は非常に重要な構成ファイルであり、システムの起動時に自動的に実行されるさまざまなコマンドと設定が含まれています。 Bashrc ファイルは通常、ユーザーのホーム ディレクトリにある隠しファイルであり、その機能はユーザーの Bashshell 環境をカスタマイズすることです。 1. Bashrc関数の設定環境

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 を使用する方法を、具体的なコード例とともに紹介します。ステップ 1: Git をインストールする まず、Git がコンピューターにインストールされていることを確認します。インストールされていない場合は、[Git 公式 Web サイト](https://git-scm.com/) にアクセスして、最新バージョンの Git をダウンロードしてインストールします。

win11システムでワークグループを構成する方法 win11システムでワークグループを構成する方法 Feb 22, 2024 pm 09:50 PM

Win11 でワークグループを構成する方法 ワークグループは、ローカル エリア ネットワークで複数のコンピューターを接続する方法であり、ファイル、プリンター、その他のリソースをコンピューター間で共有できるようになります。 Win11 システムでは、ワークグループの構成は非常に簡単で、次の手順に従うだけです。ステップ 1: 「設定」アプリケーションを開く まず、Win11 システムの「スタート」ボタンをクリックし、ポップアップ メニューで「設定」アプリケーションを選択します。ショートカット「Win+I」を使用して「設定」を開くこともできます。ステップ 2: [システム] を選択します 設定アプリには、複数のオプションが表示されます。 「システム」オプションをクリックしてシステム設定ページに入ってください。ステップ 3: [バージョン情報] を選択します。 [システム] 設定ページには、複数のサブオプションが表示されます。クリックしてください

Linux システムで FTPS を構成してインストールする方法 Linux システムで FTPS を構成してインストールする方法 Mar 20, 2024 pm 02:03 PM

タイトル: Linux システムで FTPS を構成およびインストールする方法、具体的なコード例が必要です。Linux システムでは、FTPS は安全なファイル転送プロトコルです。FTP と比較して、FTPS は TLS/SSL プロトコルを通じて送信データを暗号化し、データのセキュリティを向上させます。伝染 ; 感染。この記事では、Linux システムに FTPS を構成およびインストールする方法を紹介し、具体的なコード例を示します。ステップ 1: vsftpd をインストールする ターミナルを開き、次のコマンドを入力して vsftpd をインストールします: sudo

See all articles