shiro 패키지 filter ChainDefinitionMap
8867 단어 Shiro
이전 학습 에서 Shiro 를 접 한 Default Filter 는 전체 Shiro 구조 에서 모든 요 구 를 차단 하 는 역할 을 했 습 니 다.Shiro Default Filter 에서 filter Chain Definitions 속성 을 설정 하 였 습 니 다.filter Chain Definitions 의 역할 은 Shiro 에 의 해 차단 되 는 모든 요청 에 대해 설명 하 는 것 입 니 다. 다음은 표준 Default Filter 와 filter Chain Definitions 의 설정 을 보 겠 습 니 다.
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
<property name="securityManager" ref="securityManager" />
<property name="loginUrl" value="/login/toLogin" />
<property name="successUrl" value="/example/index" />
<property name="unauthorizedUrl" value="/example/unauthorized" />
<property name="filterChainDefinitions">
<value>
/login/toLogin = anon
/login/loginVal = anon
/login/logout = logout
/example/admin =authc,roles[admin]
/example/admin =authc,perms[admin:view:*]
/example/user = authc,roles[user]
/example/user = authc,perms[user:view:*]
/** = authc
value>
property>
bean>
이상 의 설정 에서 우 리 는 문 제 를 예견 할 수 있 습 니 다. 그것 은 filter Chain Definitions 의 성명 이 너무 많 으 면 이 프로필 이 불필요 하고 비대 해 질 수 있 습 니 다. 이것 은 강박 증 이 있 는 Dev 에 게 매우 고통스러운 고통 이 될 것 입 니 다. 그래서 우 리 는 우아 하고 간결 한 filter Chain Definitions 를 설정 해 야 합 니 다.
공장 디자인 모델 을 통 해 filter Chain DefinitionMap 을 만 드 는 것 을 소개 합 니 다.Shiro 의 소스 코드 에서 filter Chain Definition 자체 가 링크 드 HashMap 이 어야 합 니 다.
public class ShiroFilterFactoryBean implements FactoryBean, BeanPostProcessor {
private static transient final Logger log = LoggerFactory.getLogger(ShiroFilterFactoryBean.class);
private SecurityManager securityManager;
private Map filters;
private Map filterChainDefinitionMap; //urlPathExpression_to_comma-delimited-filter-chain-definition
private String loginUrl;
private String successUrl;
private String unauthorizedUrl;
private AbstractShiroFilter instance;
public ShiroFilterFactoryBean() {
this.filters = new LinkedHashMap();
this.filterChainDefinitionMap = new LinkedHashMap(); //order matters!
}
}
package com.shiro.example.utils;
import java.util.LinkedHashMap;
public class FilterChainDefinitionMapBuilder {
/**
* FilterChainDefinition
* @return
*/
public LinkedHashMap buildFilterChainDefinitionMap(){
LinkedHashMap map = new LinkedHashMap<>();
//
map.put("/login/toLogin", "anon");
map.put("/login/loginVal", "anon");
map.put("/login/logout ", "logout");
map.put("/example/admin", "authc,roles[admin]");
map.put("/example/admin", "authc,perms[admin:view:*]");
map.put("/example/user", "authc,roles[user]");
map.put("/example/user", "authc,perms[user:view:*]");
map.put("/**", "authc");
return map;
}
}
사용자 정의 <bean id="filterChainDefinitionMapBuilder"
class="com.shiro.example.utils.FilterChainDefinitionMapBuilder">bean>
<bean id="filterChainDefinitionMap"
factory-bean="filterChainDefinitionMapBuilder"
factorymethod="buildFilterChainDefinitionMap">bean>
<property name="filterChainDefinitionMap" ref="filterChainDefinitionMap">
property>
filter Chain DefinitionMap 을 다시 밀봉 하면 다음 과 같은 이점 을 얻 을 수 있 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[Shiro] Shiro 라벨 사용guest , , 。--> <shiro:guest> shiro:guest> <shiro:user> shiro:user> <--! authenticated , , Subject.login , 。...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.