Commit c975c1c8 authored by xc's avatar xc

shiro 拦截规则操作跨域

parent e0ed4b2e
...@@ -85,26 +85,30 @@ public class KickoutSessionControlFilter extends AccessControlFilter{ ...@@ -85,26 +85,30 @@ public class KickoutSessionControlFilter extends AccessControlFilter{
// 登录超时 // 登录超时
Integer userId = null; Integer userId = null;
String tableName = "";
try { try {
//客户端 //客户端
User user = (User)SecurityUtils.getSubject().getPrincipal(); User user = (User)SecurityUtils.getSubject().getPrincipal();
log.info("KickoutSessionControlFilter user : {}.......",user.toString()); log.info("KickoutSessionControlFilter user : {}.......",user.toString());
userId = user.getId(); userId = user.getId();
tableName="user";
} catch (Exception e) { } catch (Exception e) {
try { try {
//管理端 //管理端
AccountInfo accountInfo = (AccountInfo)SecurityUtils.getSubject().getPrincipal(); AccountInfo accountInfo = (AccountInfo)SecurityUtils.getSubject().getPrincipal();
log.info("KickoutSessionControlFilter accountInfo : {}.......",accountInfo.toString()); log.info("KickoutSessionControlFilter accountInfo : {}.......",accountInfo.toString());
userId = accountInfo.getId(); userId = accountInfo.getId();
tableName="account";
} catch (Exception en) { } catch (Exception en) {
//员工端 //员工端
log.info("KickoutSessionControlFilter getSubject : {}..getPrincipal:{},.....",SecurityUtils.getSubject(),SecurityUtils.getSubject().getPrincipal()); log.info("KickoutSessionControlFilter getSubject : {}..getPrincipal:{},.....",SecurityUtils.getSubject(),SecurityUtils.getSubject().getPrincipal());
Staff staff = (Staff) SecurityUtils.getSubject().getPrincipal(); Staff staff = (Staff) SecurityUtils.getSubject().getPrincipal();
log.info("KickoutSessionControlFilter staff : {}.......",staff.toString()); log.info("KickoutSessionControlFilter staff : {}.......",staff.toString());
userId = staff.getId(); userId = staff.getId();
tableName="staff";
} }
} }
Long SessionTime = (Long)redisTemplate.opsForValue().get("shiroSessionTime:"+userId); Long SessionTime = (Long)redisTemplate.opsForValue().get(tableName+"shiroSessionTime:"+userId);
Long loginTime = new Date().getTime()-SessionTime; Long loginTime = new Date().getTime()-SessionTime;
Boolean loginOutTime = (new Date().getTime()-SessionTime) >= (EXPIRE_TIME * 1000); Boolean loginOutTime = (new Date().getTime()-SessionTime) >= (EXPIRE_TIME * 1000);
log.info("KickoutSessionControlFilter 账号id:{} 已登录时长:{} 秒,是否超时:{}",userId,loginTime/1000,loginOutTime); log.info("KickoutSessionControlFilter 账号id:{} 已登录时长:{} 秒,是否超时:{}",userId,loginTime/1000,loginOutTime);
...@@ -130,7 +134,7 @@ public class KickoutSessionControlFilter extends AccessControlFilter{ ...@@ -130,7 +134,7 @@ public class KickoutSessionControlFilter extends AccessControlFilter{
return false; return false;
} }
log.info("KickoutSessionControlFilter Not Login end......."); log.info("KickoutSessionControlFilter Not Login end.......");
redisTemplate.opsForValue().set("shiroSessionTime:"+userId, new Date().getTime()); redisTemplate.opsForValue().set(tableName+"shiroSessionTime:"+userId, new Date().getTime());
return true; return true;
} }
...@@ -153,18 +157,22 @@ public class KickoutSessionControlFilter extends AccessControlFilter{ ...@@ -153,18 +157,22 @@ public class KickoutSessionControlFilter extends AccessControlFilter{
Session session = subject.getSession(); Session session = subject.getSession();
Serializable sessionId = session.getId(); Serializable sessionId = session.getId();
Integer userId = null; Integer userId = null;
String tableName = "";
if(type == 1){ if(type == 1){
User user=(User)subject.getPrincipal(); User user=(User)subject.getPrincipal();
userId=user.getId(); userId=user.getId();
tableName="user";
}else if(type == 2){ }else if(type == 2){
AccountInfo account=(AccountInfo)subject.getPrincipal(); AccountInfo account=(AccountInfo)subject.getPrincipal();
userId=account.getId(); userId=account.getId();
tableName="account";
}else{ }else{
Staff staff=(Staff)subject.getPrincipal(); Staff staff=(Staff)subject.getPrincipal();
userId=staff.getId(); userId=staff.getId();
tableName="staff";
} }
//读取缓存,没有就存入 //读取缓存,没有就存入
Deque<Serializable> deque =(Deque<Serializable>) redisTemplate.opsForValue().get(getRedisKickoutKey(userId)); Deque<Serializable> deque =(Deque<Serializable>) redisTemplate.opsForValue().get(getRedisKickoutKey(userId,tableName));
//如果此用户没有session队列,也就是还没有登录过,缓存中没有,就new一个空队列,不然deque对象为空,会报空指针 //如果此用户没有session队列,也就是还没有登录过,缓存中没有,就new一个空队列,不然deque对象为空,会报空指针
if (deque == null || deque.size()==0) { if (deque == null || deque.size()==0) {
deque = new LinkedList<>(); deque = new LinkedList<>();
...@@ -189,13 +197,13 @@ public class KickoutSessionControlFilter extends AccessControlFilter{ ...@@ -189,13 +197,13 @@ public class KickoutSessionControlFilter extends AccessControlFilter{
} }
} }
// 更新redis中的用户登录队列 // 更新redis中的用户登录队列
redisTemplate.opsForValue().set(getRedisKickoutKey(userId), deque, EXPIRE_TIME, TimeUnit.SECONDS); redisTemplate.opsForValue().set(getRedisKickoutKey(userId,tableName), deque, EXPIRE_TIME, TimeUnit.SECONDS);
redisTemplate.opsForValue().set("shiroSessionTime:"+userId, new Date().getTime()); redisTemplate.opsForValue().set(tableName+"shiroSessionTime:"+userId, new Date().getTime());
log.info("KickoutSessionControlFilter changeSession end......."); log.info("KickoutSessionControlFilter changeSession end.......");
} }
private String getRedisKickoutKey(Integer userId) { private String getRedisKickoutKey(Integer userId,String tabelName) {
return keyprefix + userId; return keyprefix+tabelName+ userId;
} }
// 抛出未登录异常 // 抛出未登录异常
...@@ -226,7 +234,7 @@ public class KickoutSessionControlFilter extends AccessControlFilter{ ...@@ -226,7 +234,7 @@ public class KickoutSessionControlFilter extends AccessControlFilter{
private void setHeader(HttpServletRequest request, HttpServletResponse response) { private void setHeader(HttpServletRequest request, HttpServletResponse response) {
//跨域的header设置 //跨域的header设置
response.setHeader("Access-control-Allow-Origin", request.getHeader("Origin")); response.setHeader("Access-control-Allow-Origin", request.getHeader("Origin"));
response.setHeader("Access-Control-Allow-Methods", request.getMethod()); response.setHeader("Access-Control-Allow-Methods", "GET,POST,OPTIONS,PUT,DELETE");
response.setHeader("Access-Control-Allow-Credentials", "true"); response.setHeader("Access-Control-Allow-Credentials", "true");
response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers")); response.setHeader("Access-Control-Allow-Headers", request.getHeader("Access-Control-Request-Headers"));
//防止乱码,适用于传输JSON数据 //防止乱码,适用于传输JSON数据
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment