七、Shiroフィルター
8664 ワード
一、内蔵フィルター
(一)内蔵フィルタの紹介 roles[a,b,c]は、 にアクセスするには、ロールが一致する必要があります. perms[a,b]は、 にアクセスするには、すべての権限を持つ必要があります. port[a,b]、アクセスできるポートを指定する必要があります!! #################################### anno: へのアクセス権限なし authc: にアクセスするには認証が必要です. user: にアクセスするには、ユーザー・オブジェクトが存在する必要があります. logoutログインが終了するまで にアクセスできません.
(二)内蔵フィルタテスト
二、カスタムフィルタ 内蔵フィルタの欠点:例えば
カスタム認証に関連するフィルタであれば、
ここでは、ロールの1つさえあればアクセスできるようにする例で、カスタムフィルタの説明を行います.
(一)カスタムフィルタRolesOrFilterの作成
(二)カスタムフィルタの構成
(一)内蔵フィルタの紹介
(二)内蔵フィルタテスト
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="login.html"/>
<property name="unauthorizedUrl" value="403.html"/>
<property name="filterChainDefinitions">
<value>
/login.html = anon
/sublogin = anon
/testRole = roles[admin]
/testRole1 = roles[admin,user]
/testPermission = perms[user:delete]
/testPermission1 = perms[user:delete,user:add]
/* = authc
value>
property>
bean>
二、カスタムフィルタ 内蔵フィルタの欠点:例えば
/testRole1 = roles[admin,user]
はadmin,user
ロールを同時に持たなければ/testRole1
ロールにアクセスできないことを示しているが、そのうちの1つのロールさえあればアクセスできる必要がある場合がある.このような需要内蔵フィルタは満足できないため、カスタムフィルタが必要である.カスタム認証に関連するフィルタであれば、
AuthenticationFilter
を継承する必要がある.カスタムライセンス関連フィルタの場合は、AuthorizationFilter
を継承する必要があります.ここでは、ロールの1つさえあればアクセスできるようにする例で、カスタムフィルタの説明を行います.
(一)カスタムフィルタRolesOrFilterの作成
/**
* @author
* @date 2018/9/8 22:18
* RolesOrFilter : ,
*/
public class RolesOrFilter extends AuthorizationFilter {
@Override
protected boolean isAccessAllowed(ServletRequest servletRequest, ServletResponse servletResponse, Object o) throws Exception {
// Subject
Subject subject = getSubject(servletRequest, servletResponse);
/**
* "shiroFilter" , :
*
* , , “/testRole1 = rolesOr[admin,user]”,
* Object admin,user 。
*/
String[] roles = (String[]) o;
if (roles != null && roles.length != 0){
for (String role : roles){
//
if (subject.hasRole(role)){
return true;
}
}
}
return false;
}
}
(二)カスタムフィルタの構成
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager"/>
<property name="loginUrl" value="login.html"/>
<property name="unauthorizedUrl" value="403.html"/>
<property name="filterChainDefinitions">
<value>
/login.html = anon
/sublogin = anon
/testRole = roles[admin,user]
/testRole1 = rolesOr[admin,user]
/testPermission = perms[user:delete]
/testPermission1 = perms[user:delete,user:add]
/* = authc
value>
property>
<property name="filters">
<util:map>
<entry key="rolesOr" value-ref="rolesOrFilter"/>
util:map>
property>
bean>
<bean id="rolesOrFilter" class="org.pc.filter.RolesOrFilter"/>