Skip to content

M、扩展

wangjie edited this page Dec 25, 2019 · 1 revision

组件的扩展是通过ShiroCustomizer实现

@Configuration
public class ApplicationConfig{
    @Bean
    public ShiroCustomizer shiroCustomizer() {
        ShiroCustomizer customizer = new ShiroCustomizer();
	// 设置账号数据提供服务
	customizer.setShiroAccountProvider(accountProviderImpl); 
	// 设置加密实现
	//customizer.setPasswordProvider(myDESPasswordProvider);
	// 设置验证码实现
	customizer.setCaptchaProvider(myCaptchaService);
	// 设置密码输入错误次数超限处理器
	customizer.setPasswdRetryLimitListener(passwdRetryLimitHandler);
	// 设置鉴权规则数据提供服务
	customizer.setShiroFilteRulesProvider(filteRulesProviderImpl);
	// 设置无状态鉴权(HMAC\JWT)专用的账号数据提供服务
	customizer.setShiroStatelessAccountProvider(statelessAccountProviderImpl);
	// 添加认证监听器
	customizer.addAuthListener(authListenerImpl1);
	customizer.addAuthListener(authListenerImpl2);
	// 添加Session监听器
	customizer.addSessionListener(sessionListenerImpl1);
	customizer.addSessionListener(sessionListenerImpl2);

	//如需要定制RememberMe Cookie的name、domain、httpOnly可使用此方法
	customizer.setRememberMeCookie(SimpleCookie)
        // 如果组件提供的session缓存方式(内存、ehcache、redis)无法满足需求,可设置此项定制session持久化
	customizer.setSessionDAO(SessionDAO);
	// 如果组件提供的缓存方式(内存、ehcache、redis)无法满足需求,可设置此项定制缓存实现
	customizer.setCacheManager(CacheManager)
        // 组件中提供三个控制域
        // AccountPasswdRealm:有状态用户名,密码鉴权控制域
        // HmacRealm:无状态hmac签名鉴权控制域
        // JwtRealm:无状态jwt令牌鉴权控制域
        // 如果无法满足需求,可设置此项添加鉴权控制域
	customizer.addRealm(realName, Realm)
	// 组件中提供的过滤器:
        // authc:基于表单的登陆过滤器
        // roles:基于角色的验证过滤器
        // perms:基于权限的验证过滤器
        // user:断言seesion中存在用户的过滤器
        // keepOne:账号唯一用户登陆过滤器
        // forceLogout:强制用户下线过滤器
        // hmac:hmac数字签名认证过滤器
        // hmacRoles:hmac数字签名角色验证过滤器
        // hmacPerms:hmac数字签名权限验证过滤器
        // jwt:jwt令牌认证过滤器
        // jwtRoles:jwt令牌角色验证过滤器
        // jwtPerms:jwt令牌权限验证过滤器
        // 如果无法满足需求,可设置此项覆盖或者添加过滤器
	customizer.addFilter(filterName, Filter)
	return customizer;
    }
}
Clone this wiki locally