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登录的源码和原理,敬请期待!
来源:oschina
链接:https://my.oschina.net/u/4326858/blog/4574759