shiro,
最近の古いプロジェクトの統合、時間を割いて研究して、Apache Shiro.
まずApache Shiroはspringプロジェクトで基本的に構成されています.
1、spring-config-*.xmlでの構成
2、web.xmlでの構成
**filter-nameとbeanidは同じである必要があります.DelegatingFilterProxyはこのfilter-nameでbeanidを検索します.
プロジェクトの開始時:
まず、
DelegtingFilterProxyクラスで初期化し、Filter delegateの変数をbeanId=に初期化します.
shiroFilterのセキュリティ認証
SpringShiroFilter
.
また詳しく見てください
org.apache.shiro.spring.web.ShiroFilterFactoryBeanはどのように実現されていますか.
urlを実行すると、次の順序になります.
org.springframework.web.filter.DelegatingFilterProxy.doFilter --->(
SpringShiroFilter
)
delegate.doFilter----->
doFilterInternal
shiroマルチログイン構成
複数のログインページからの構成を実装するには、次の手順に従います.
実装方法は、filterchainをカスタマイズすることです.
具体的な方法は以下の通りです.
スプリングがshiroFilterを初期化すると、次のようになります.
にある
ShiroFilterFactoryBean
このクラスは注入されたfilter属性loginUrl,successUrlを初期化し,どのように元のデフォルト値の化が,新しい値に初期化されるか,そうでなければ変更しない.
まずApache Shiroはspringプロジェクトで基本的に構成されています.
1、spring-config-*.xmlでの構成
<!-- -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<!-- -->
<property name="loginUrl" value="/index.jsp" />
<property name="successUrl" value="/loginSuccess.jsp" />
<property name="unauthorizedUrl" value="" />
<property name="filterChainDefinitions">
<value>
/logout.do = logout
/user/** = authc
/admin/** = authc,roles[admin]
</value>
</property>
</bean>
<!-- Shiro -->
<bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
<property name="realm" ref="systemAuthorizingRealm" />
<property name="sessionManager" ref="sessionManager" />
<property name="cacheManager" ref="shiroCacheManager" />
</bean>
2、web.xmlでの構成
<!-- Apache Shiro -->
<filter>
<filter-name>shiroFilter</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
<init-param>
<param-name>targetFilterLifecycle</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>shiroFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
**filter-nameとbeanidは同じである必要があります.DelegatingFilterProxyはこのfilter-nameでbeanidを検索します.
プロジェクトの開始時:
まず、
DelegtingFilterProxyクラスで初期化し、Filter delegateの変数をbeanId=に初期化します.
shiroFilterのセキュリティ認証
SpringShiroFilter
.
また詳しく見てください
org.apache.shiro.spring.web.ShiroFilterFactoryBeanはどのように実現されていますか.
urlを実行すると、次の順序になります.
org.springframework.web.filter.DelegatingFilterProxy.doFilter --->(
SpringShiroFilter
)
delegate.doFilter----->
doFilterInternal
shiroマルチログイン構成
複数のログインページからの構成を実装するには、次の手順に従います.
実装方法は、filterchainをカスタマイズすることです.
具体的な方法は以下の通りです.
<!-- -->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<!-- -->
<property name="loginUrl" value="/index.jsp" />
<property name="successUrl" value="/loginSuccess.jsp" />
<property name="unauthorizedUrl" value="" />
<property name="filterChainDefinitions">
<value>
/logout.do = logout
/user/** = authc
/admin/** = authc,roles[admin]
/index/** = shopauthc
</value>
</property>
<!-- -->
<bean id="shopformauthenticationfilter" class="org.mia.ontelshop.modules.sys.security.ShopFormAuthenticationFilter">
<property name="loginUrl" value="index/login" />
<property name="successUrl" value="index?login" />
</bean>
原理:スプリングがshiroFilterを初期化すると、次のようになります.
private void applyLoginUrlIfNecessary(Filter filter) {
String loginUrl = getLoginUrl();
if (StringUtils.hasText(loginUrl) && (filter instanceof AccessControlFilter)) {
AccessControlFilter acFilter = (AccessControlFilter) filter;
//only apply the login url if they haven't explicitly configured one already:
String existingLoginUrl = acFilter.getLoginUrl();
if (AccessControlFilter.DEFAULT_LOGIN_URL.equals(existingLoginUrl)) {
acFilter.setLoginUrl(loginUrl);
}
}
}
private void applySuccessUrlIfNecessary(Filter filter) {
String successUrl = getSuccessUrl();
if (StringUtils.hasText(successUrl) && (filter instanceof AuthenticationFilter)) {
AuthenticationFilter authcFilter = (AuthenticationFilter) filter;
//only apply the successUrl if they haven't explicitly configured one already:
String existingSuccessUrl = authcFilter.getSuccessUrl();
if (AuthenticationFilter.DEFAULT_SUCCESS_URL.equals(existingSuccessUrl)) {
authcFilter.setSuccessUrl(successUrl);
}
}
}
にある
ShiroFilterFactoryBean
このクラスは注入されたfilter属性loginUrl,successUrlを初期化し,どのように元のデフォルト値の化が,新しい値に初期化されるか,そうでなければ変更しない.