Acegi 的配置(2)
在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 CHAINFilterChainProxy会按顺序来调用这些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>
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。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

Maven は、Java プロジェクトの開発で広く使用されている Java プロジェクト管理およびビルド ツールです。 Maven を使用してプロジェクトを構築する過程で、いくつかの一般的な環境構成の問題が発生することがよくあります。この記事では、これらの一般的な質問に答え、読者が一般的な構成エラーを回避できるように具体的なコード例を示します。 1. Maven 環境変数が正しく構成されていない 問題の説明: Maven を使用する場合、環境変数が正しく構成されていないと、Maven が正しく動作しない可能性があります。解決策: 必ず確認してください

PyCharm は一般的に使用される統合開発環境 (IDE) であり、日常の開発では Git を使用してコードを管理することが不可欠です。この記事では、PyCharm で Git を構成し、コード管理に Git を使用する方法を、具体的なコード例とともに紹介します。ステップ 1: Git をインストールする まず、Git がコンピューターにインストールされていることを確認します。インストールされていない場合は、[Git 公式 Web サイト](https://git-scm.com/) にアクセスして、最新バージョンの Git をダウンロードしてインストールします。

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

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