-
Notifications
You must be signed in to change notification settings - Fork 122
L、监听器
wangjie edited this page Dec 25, 2019
·
1 revision
监听用户认证和鉴权期间所发生的事件,可以基于此做日志、资源建立、资源清理等工作
public interface AuthListener {
/**
* 登录成功
* @param request http请求
* @param account 账号
*/
void onLoginSuccess(ServletRequest request,String account);
/**
* 登录失败
* @param request http请求
* @param account 账号
* @param reason 登录失败原因原因
*/
void onLoginFailure(ServletRequest request,String account,String reason);
/**
* 登出
* @param request http请求
* @param account 账号
*/
void onLogout(ServletRequest request,String account);
/**
*
* 用户被踢出
* @param request http请求
* @param account 账号
* @param loginedHost 已登录HOST
* @param loginedTime 已登时间
*
*
* 如:账号admin在机器A登录,
* 再有人用admin在机器B登录,
* 会触发此事件,loginedHost为机器A的HOST,loginedTime为在机器A登录的时间
*
*
*/
void onKeepOneKickout(ServletRequest request,String account,String loginedHost,Date loginedTime);
/**
*
* 强制用户下线
* @param request http请求
* @param account 账号
*
*/
void onForceLogout(ServletRequest request,String account);
/**
* 访问断言
* @param request http请求
* @param account 账号
* @param needRoles 访问资源需要的角色
* @param allowed 是否允许访问
*/
void onAccessAssert(ServletRequest request,String account,String needRoles,boolean allowed);
}
监听Session的生命周期
public interface SessionListener {
/**
* 会话开始
*/
void onStart(Session session);
/**
* 会话结束
*/
void onStop(Session session);
/**
* 会话过期
*/
void onExpiration(Session session);
}
@Configuration
public class ApplicationConfig{
// 账号数据提供服务
@Autowired
private AccountProviderImpl accountProviderImpl;
// 自定义的加密实现
//@Autowired
//private MyDESPasswordProvider myDESPasswordProvider;
// 自定义的验证码实现
@Autowired
private MyCaptchaService myCaptchaService;
// 密码输入错误次数超限处理器
@Autowired
private PasswdRetryLimitHandler passwdRetryLimitHandler;
// 鉴权规则数据提供服务
@Autowired
private FilteRulesProviderImpl filteRulesProviderImpl;
// 无状态鉴权(HMAC\JWT)专用的账号数据提供服务
@Autowired
private StatelessAccountProviderImpl statelessAccountProviderImpl;
// 认证监听器实现
@Autowired
private AuthListenerImpl1 authListenerImpl1;
@Autowired
private AuthListenerImpl2 authListenerImpl2;
// session监听器实现
@Autowired
private SessionListenerImpl1 sessionListenerImpl1;
@Autowired
private SessionListenerImpl2 sessionListenerImpl2;
@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);
return customizer;
}
}