main
黄海 12 months ago
parent c09ce5731d
commit 0099680c55

@ -59,6 +59,11 @@
<artifactId>jjwt</artifactId>
<version>0.7.0</version>
</dependency>
<dependency>
<groupId>javax.xml.bind</groupId>
<artifactId>jaxb-api</artifactId>
<version>2.3.1</version>
</dependency>
<!--引用json库-->
<dependency>
<groupId>net.sf.json-lib</groupId>

@ -1,8 +1,6 @@
package com.dsideal.ZhuQue.Interceptor;
import com.alibaba.fastjson.JSONObject;
import com.dsideal.ZhuQue.Util.CommonUtil;
import com.dsideal.ZhuQue.Util.SessionKit;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
@ -53,12 +51,6 @@ public class IsLoginInterceptor implements Interceptor {
Claims cs = JwtUtil.getClaimsFromToken(token, secret);
if (cs == null || cs.isEmpty()) {
isTrue = false;
} else {
//{date=Tue Aug 06 13:37:05 CST 2024, phone=13756511990, type=WX, userId=94312}
String phone = cs.get("phone").toString();
String userId = cs.get("userId").toString();
SessionKit.set(request, con.getResponse(), "userId", userId);
SessionKit.set(request, con.getResponse(), "phone", phone);
}
}
if (isTrue) {

@ -1,48 +0,0 @@
package com.dsideal.ZhuQue.Interceptor;
import com.dsideal.ZhuQue.Util.CommonUtil;
import com.dsideal.ZhuQue.Util.SessionKit;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
/**
*
*
* @author Administrator
*/
public class IsSysAdminInterceptor implements Interceptor {
@Override
public void intercept(Invocation inv) {
IsSysAdminInterface annotation = inv.getMethod().getAnnotation(IsSysAdminInterface.class);
if (annotation != null) {
checkSysAdmin(annotation, inv);
} else {
inv.invoke();
}
}
public void checkSysAdmin(IsSysAdminInterface annotation, Invocation inv) {
Controller con = inv.getController();
String header = con.getHeader("Content-Type"); //取出head头
if (header != null && header.indexOf("multipart/form-data") != -1) { //判断是否是form-data
inv.invoke();
}
boolean isTrue = false;
String[] value = annotation.value();
if (SessionKit.get(con.getRequest(), con.getResponse(), "identity_id") != null) {
for (String v : value) {
if (SessionKit.get(con.getRequest(), con.getResponse(), "identity_id").equals(v)) {
isTrue = true;
break;
}
}
}
if (isTrue) {
inv.invoke();
} else {
con.renderJson(CommonUtil.returnMessageJson(false, "您的身份有误,未被识别为管理员或管理员权限不足,无法进行操作!"));
}
}
}

@ -1,69 +0,0 @@
package com.dsideal.ZhuQue.Interceptor;
import com.dsideal.ZhuQue.Util.CommonUtil;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.core.Controller;
/**
* layui
*
* @author Administrator
*/
public class LayUiPageInfoInterceptor implements Interceptor {
@Override
public void intercept(Invocation inv) {
LayUiPageInfoInterface annotation = inv.getMethod().getAnnotation(LayUiPageInfoInterface.class);
if (annotation != null) {
checkLayUiPageInfo(annotation, inv);
} else {
inv.invoke();
}
}
public void checkLayUiPageInfo(LayUiPageInfoInterface annotation, Invocation inv) {
Controller con = inv.getController();
String header = con.getHeader("Content-Type"); //取出head头
if (header != null && header.indexOf("multipart/form-data") != -1) { //判断是否是form-data
inv.invoke();
}
String[] value = annotation.value();
String o_page = null;
String o_limit = null;
for (String v : value) {
String parameter = con.getPara(v);
if (v.equals("page")) {
o_page = parameter;
}
if (v.equals("limit")) {
o_limit = parameter;
}
}
if (o_page != null && o_limit != null) {
if (!CommonUtil.isNumeric(o_page)) {
con.renderJson(CommonUtil.returnMessageJson(false, "传入的page参数不是数字"));
}
if (!CommonUtil.isNumeric(o_limit)) {
con.renderJson(CommonUtil.returnMessageJson(false, "传入的limit参数不是数字"));
}
//检查大小
int page = Integer.parseInt(o_page);
int limit = Integer.parseInt(o_limit);
if (limit > 100) {
con.renderJson(CommonUtil.returnMessageJson(false, "传入的limit参数大于100被禁止"));
}
if (limit < 1) {
con.renderJson(CommonUtil.returnMessageJson(false, "传入的limit参数小于1被禁止"));
}
//放行
inv.invoke();
} else if (o_page == null) {
con.renderJson(CommonUtil.returnMessageJson(false, "传入的page参数为空"));
} else if (o_limit == null) {
con.renderJson(CommonUtil.returnMessageJson(false, "传入的limit参数为空"));
}
}
}

@ -1,10 +0,0 @@
package com.dsideal.ZhuQue.Interceptor;
import java.lang.annotation.*;
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@Target({ElementType.TYPE, ElementType.METHOD})
public @interface LayUiPageInfoInterface {
String[] value();
}

@ -1,40 +0,0 @@
package com.dsideal.ZhuQue.Interceptor;
import com.dsideal.ZhuQue.Util.SessionKit;
import com.jfinal.aop.Interceptor;
import com.jfinal.aop.Invocation;
import com.jfinal.kit.PropKit;
/**
* @author Administrator
*/
public class OnlinePersonCountInterceptor implements Interceptor {
@Override
public void intercept(Invocation inv) {
var req = inv.getController().getRequest();
var res = inv.getController().getResponse();
if (inv.getController().getRequest().getRequestURL().indexOf("/loginPerson/showOnline") >= 0) {
inv.invoke();
return;
}
//根据JSessionId判断是不是已登录
String sessionKey = PropKit.get("sessionKey");
boolean flag = false;
for (var c : sessionKey.split(",")) {
if (SessionKit.get(req, res, c) != null) {
flag = true;
break;
}
}
String action_set_login = PropKit.get("action_set_login");
String action_set_nologin = PropKit.get("action_set_nologin");
if (flag) {//已登录
OnlinePersonCountUtil.addSet(action_set_login, req, res);
} else {//未登录
OnlinePersonCountUtil.addSet(action_set_nologin, req, res);
}
inv.invoke();
}
}

@ -1,45 +0,0 @@
package com.dsideal.ZhuQue.Interceptor;
import com.dsideal.ZhuQue.Util.RedisKit;
import com.dsideal.ZhuQue.Util.SessionKit;
import com.jfinal.kit.PropKit;
import redis.clients.jedis.resps.Tuple;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.ArrayList;
import java.util.List;
public class OnlinePersonCountUtil {
public static void clearTimeOut() {
List<String> list = new ArrayList<>();
list.add(PropKit.get("action_set_login"));
list.add(PropKit.get("action_set_nologin"));
for (int i = 0; i < list.size(); i++) {
String scoreSet = list.get(i);
long seconds = System.currentTimeMillis() / 1000; //获取当前时间戳(秒)
List<Tuple> members = RedisKit.zrangeByScoreWithScores(scoreSet, "-inf", String.valueOf(seconds));
for (Tuple member : members) {
long score = (long) member.getScore();
String memberValue = member.getElement();
if (score < seconds - PropKit.getInt("action_dead_seconds")) {//600秒以前的算过期清理掉
RedisKit.zrem(scoreSet, memberValue); // 删除过期成员
}
}
}
}
public static void addSet(String setName, HttpServletRequest req, HttpServletResponse res) {
clearTimeOut();
String jSessionId = SessionKit.getCookieSessionId(req, res);
long seconds = System.currentTimeMillis() / 1000;
RedisKit.zadd(setName, seconds, jSessionId);
}
public static void removeSet(String setName, HttpServletRequest req, HttpServletResponse res) {
clearTimeOut();
String jSessionId = SessionKit.getCookieSessionId(req, res);
RedisKit.zrem(setName, jSessionId);
}
}

@ -1,95 +0,0 @@
package com.dsideal.ZhuQue.Util;
import com.dsideal.ZhuQue.Interceptor.OnlinePersonCountUtil;
import com.jfinal.kit.PropKit;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.UUID;
public class SessionKit {
public static String JSessionId = "sessionId";//Cookie中sessionId的名称
public static long TimeoutSecond = 60 * 60 * 24 * 7;//一周
/**
* CookiejSessionId
*
* @param request
* @return
*/
public static String getCookieSessionId(HttpServletRequest request, HttpServletResponse response) {
String jSessionId = null;
//客户端请求服务器时 从请求对象中获取所有的cookie
Cookie[] cookies = request.getCookies();
if (cookies != null) {
//遍历cookie集合 根据名字获取对应的value
for (Cookie cookie : cookies) {
//判断是否为指定cookie
if (JSessionId.equals(cookie.getName())) {
//获取对应的值
jSessionId = cookie.getValue();
break;
}
}
}
if (cookies == null || jSessionId == null) {
// 创建cookie对象
jSessionId = UUID.randomUUID().toString().toLowerCase();
Cookie cookie = new Cookie(JSessionId, jSessionId);
cookie.setPath("/");
// 设置cookie存活时间
response.addCookie(cookie);
}
return JSessionId + "_" + jSessionId;
}
public static void clear(HttpServletRequest request, HttpServletResponse response) {
String jSessionId = getCookieSessionId(request, response);
//写入jSessionId的key域值
RedisKit.Del(jSessionId);
Cookie[] cookies = request.getCookies();
if (cookies != null) {
for (Cookie cookie : cookies) {
cookie.setMaxAge(0); // 将Cookie的过期时间设为0表示立即过期
response.addCookie(cookie); // 发送修改后的Cookie回客户端
}
}
//三连击
OnlinePersonCountUtil.clearTimeOut();
OnlinePersonCountUtil.removeSet(PropKit.get("action_set_login"), request, response);
OnlinePersonCountUtil.removeSet(PropKit.get("action_set_nologin"), request, response);
}
/**
* RedisSession
*
* @param request
* @param key
* @param value
* @return
*/
public static void set(HttpServletRequest request, HttpServletResponse response, String key, String value) {
String jSessionId = getCookieSessionId(request, response);
//写入jSessionId的key域值
RedisKit.HSet(jSessionId, key, value);
//过期时长为TimeoutSecond
RedisKit.Expire(jSessionId, TimeoutSecond);
}
/**
* Session
*
* @param request
* @param key
* @return
*/
public static String get(HttpServletRequest request, HttpServletResponse response, String key) {
String jSessionId = getCookieSessionId(request, response);
if (jSessionId == null) return null;
String value = RedisKit.HGet(jSessionId, key);
//过期时长为TimeoutSecond
RedisKit.Expire(jSessionId, TimeoutSecond);
return value;
}
}

@ -2,19 +2,23 @@ package com.dsideal.ZhuQue.Ylt.Controller;
import com.dsideal.ZhuQue.Interceptor.IsLoginInterface;
import com.dsideal.ZhuQue.Util.CommonUtil;
import com.dsideal.ZhuQue.Util.SessionKit;
import com.dsideal.ZhuQue.Util.JwtUtil;
import com.dsideal.ZhuQue.Ylt.Model.YltModel;
import com.jfinal.aop.Before;
import com.jfinal.core.Controller;
import com.jfinal.ext.interceptor.GET;
import com.jfinal.kit.Kv;
import com.jfinal.plugin.activerecord.Record;
import io.jsonwebtoken.Claims;
import javax.servlet.http.HttpServletRequest;
import java.util.ArrayList;
import java.util.List;
public class YltController extends Controller {
YltModel ym = new YltModel();
public List<Record> getAll() {
List<Record> list = new ArrayList<>();
@ -61,8 +65,10 @@ public class YltController extends Controller {
@Before({GET.class})
@IsLoginInterface({})
public void getListWithAuth() {
String userId = SessionKit.get(getRequest(), getResponse(), "userId");
String phone = SessionKit.get(getRequest(), getResponse(), "phone");
//获取当前登录人员信息
Record user = ym.getUser(getRequest());
String userId = user.get("userId");
String phone = user.get("phone");
System.out.println(userId);
System.out.println(phone);

@ -0,0 +1,30 @@
package com.dsideal.ZhuQue.Ylt.Model;
import com.dsideal.ZhuQue.Util.JwtUtil;
import io.jsonwebtoken.Claims;
import javax.servlet.http.HttpServletRequest;
import com.jfinal.plugin.activerecord.Record;
public class YltModel {
/**
* JWTtoken
*
* @param request
* @return
*/
public Record getUser(HttpServletRequest request) {
//从Http请求头中获取Authorization
String Authorization = request.getHeader("Authorization");
String secret = JwtUtil.SECRET;
String token = Authorization.replaceFirst(JwtUtil.AUTHORIZATION_STARTER, "");
Claims cs = JwtUtil.getClaimsFromToken(token, secret);
String userId = cs.get("userId", String.class);
String phone = cs.get("phone", String.class);
Record record = new Record();
record.set("userId", userId);
record.set("phone", phone);
return record;
}
}
Loading…
Cancel
Save