Apache Shiro 做用戶權限管理非常流行的一款框架:下面先進入實戰
1、引入jar:
<dependency>
<groupId>org.apache.shiro</groupId>
<artifactId>shiro-spring</artifactId>
<version>1.5.0</version>
</dependency>
2、一種登錄的思路,核心實體代碼:
@Override
public void doLogin(String userName, String clientId){
logger.info("----doLogin---start--進行shiro登錄userName={},clientId={}",userName,clientId);
String sessionId = redisUtil.getString(Constant.SESSION_ID_USER_PREFIX+clientId);
if(null != sessionId && null != redisTemplate.opsForValue().get(sessionId)){
Session session = (Session) redisTemplate.opsForValue().get(sessionId);
if(null !=session){
logger.info("Session資訊存在無須重復登錄clientId={},sessionId={}",clientId,sessionId);
return;
}
}
Subject userSubject=SecurityUtils.getSubject();//取得用戶唯一userSubject
AuthenticationToken shiroToken=new UsernamePasswordToken(userName,clientId);//存盤資訊
subject.login(shiroToken);//shiro登錄
logger.info("當前登錄用戶userName={},clientId={},sessionId={}",userName,clientId,subject.getSession().getId());
if (!redisUtil.setString(Constant.SESSION_ID_USER_PREFIX+clientId,userSubject.getSession().getId().toString(),Constant.SESSION_ID_USER_EXPIRE_TIME)){
throw new LogicException("登錄失敗:快取例外");
}
logger.info("----doLogin---end--進行shiro權限登錄");
}
//核心登錄原始碼
Subject userSubject=SecurityUtils.getSubject();//取得用戶唯一userSubject
AuthenticationToken shiroToken=new UsernamePasswordToken(userName,clientId);//存盤資訊
subject.login(shiroToken);//shiro登錄
這篇和大家分析使用,下一篇和大家分析Shiro登錄的原始碼和原理,敬請期待!
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/54102.html
標籤:其他
