Commit 5af86da3 authored by zengtianlai3's avatar zengtianlai3

增加ThreadLocal

parent dd9cc4b7
package iot.sixiang.license.config; package iot.sixiang.license.config;
import iot.sixiang.license.jwt.AuthenticationInterceptor;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.*;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@Configuration @Configuration
@EnableWebMvc @EnableWebMvc
public class CorsConfig implements WebMvcConfigurer { public class CorsConfig implements WebMvcConfigurer {
@Autowired
AuthenticationInterceptor authenticationInterceptor;
@Override @Override
public void addCorsMappings(CorsRegistry registry) { public void addCorsMappings(CorsRegistry registry) {
registry.addMapping("/**") registry.addMapping("/**")
...@@ -23,6 +25,13 @@ public class CorsConfig implements WebMvcConfigurer { ...@@ -23,6 +25,13 @@ public class CorsConfig implements WebMvcConfigurer {
@Override @Override
public void addResourceHandlers(ResourceHandlerRegistry registry) { public void addResourceHandlers(ResourceHandlerRegistry registry) {
// TODO Auto-generated method stub // TODO Auto-generated method stub
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(authenticationInterceptor)
.addPathPatterns("/**");
} }
} }
package iot.sixiang.license.controller; package iot.sixiang.license.controller;
import iot.sixiang.license.jwt.LoginUser;
import iot.sixiang.license.jwt.UserUtils;
import iot.sixiang.license.model.ResResult; import iot.sixiang.license.model.ResResult;
import iot.sixiang.license.model.vo.AlarmVo; import iot.sixiang.license.model.vo.AlarmVo;
import iot.sixiang.license.service.AlarmService; import iot.sixiang.license.service.AlarmService;
...@@ -25,10 +27,11 @@ public class AlarmController { ...@@ -25,10 +27,11 @@ public class AlarmController {
private AlarmService alarmService; private AlarmService alarmService;
@GetMapping("list") @GetMapping("list")
// public ResResult getAlarmList(@RequestParam(value = "userId", defaultValue = "0") int userId) {
public ResResult getAlarmList() { public ResResult getAlarmList() {
int userId = 2147483647; String userId = UserUtils.getLoginUserId();
List<AlarmVo> alarmList = alarmService.getAlarmList(userId); int Id = Integer.valueOf(userId);
List<AlarmVo> alarmList = alarmService.getAlarmList(Id);
return ResResult.success().record(alarmList); return ResResult.success().record(alarmList);
} }
} }
......
...@@ -2,6 +2,7 @@ package iot.sixiang.license.controller; ...@@ -2,6 +2,7 @@ package iot.sixiang.license.controller;
import iot.sixiang.license.jwt.JwtUtil; import iot.sixiang.license.jwt.JwtUtil;
import iot.sixiang.license.jwt.LoginUser; import iot.sixiang.license.jwt.LoginUser;
import iot.sixiang.license.jwt.UserUtils;
import iot.sixiang.license.model.ResResult; import iot.sixiang.license.model.ResResult;
import lombok.extern.slf4j.Slf4j; import lombok.extern.slf4j.Slf4j;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
...@@ -21,11 +22,11 @@ import java.util.Map; ...@@ -21,11 +22,11 @@ import java.util.Map;
public class LoginController { public class LoginController {
//模拟数据库 //模拟数据库
static Map<Integer, LoginUser> userMap = new HashMap<>(); static Map<String, LoginUser> userMap = new HashMap<>();
static { static {
LoginUser user1 = new LoginUser("root", "123456"); LoginUser user1 = new LoginUser("2147483647","root", "123456");
userMap.put(1, user1); userMap.put("2147483647", user1);
} }
/** /**
...@@ -34,13 +35,10 @@ public class LoginController { ...@@ -34,13 +35,10 @@ public class LoginController {
@GetMapping("login") @GetMapping("login")
public ResResult login(@RequestParam("userName") String userName, @RequestParam("password") String password) { public ResResult login(@RequestParam("userName") String userName, @RequestParam("password") String password) {
// @RequestBody JSONObject jsonObject
LoginUser user = new LoginUser();
user.setUserName(userName);
user.setPassword(password);
for (LoginUser dbUser : userMap.values()) { for (LoginUser dbUser : userMap.values()) {
if (dbUser.getUserName().equals(user.getUserName()) && dbUser.getPassword().equals(user.getPassword())) { if (dbUser.getUserName().equals(userName) && dbUser.getPassword().equals(password)) {
log.info("登录成功!生成token!"); log.info("登录成功!生成token!");
String token = JwtUtil.createToken(dbUser); String token = JwtUtil.createToken(dbUser);
Map<String, String> map = new HashMap<>(); Map<String, String> map = new HashMap<>();
......
package iot.sixiang.license.jwt;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.HandlerInterceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
* Title: AuthenticationInterceptor
* Description: TODO
*
* @author m33
* @version V1.0
* @date 2022-06-13
*/
@Slf4j
@Component
public class AuthenticationInterceptor implements HandlerInterceptor {
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
UserUtils.removeUser();
}
}
\ No newline at end of file
...@@ -65,12 +65,16 @@ public class JwtFilter implements Filter { ...@@ -65,12 +65,16 @@ public class JwtFilter implements Filter {
response.getWriter().write(resultStr); response.getWriter().write(resultStr);
return; return;
} }
String userId = userData.get("userId").asString();
String userName = userData.get("userName").asString(); String userName = userData.get("userName").asString();
String password = userData.get("password").asString(); String password = userData.get("password").asString();
//拦截器 拿到用户信息,放到request中 // //拦截器 拿到用户信息,放到request中
request.setAttribute("userName", userName); // request.setAttribute("userName", userName);
request.setAttribute("password", password); // request.setAttribute("password", password);
LoginUser loginUser = new LoginUser(userId, userName, password);
UserUtils.setLoginUser(loginUser);
filterChain.doFilter(request, response); filterChain.doFilter(request, response);
} }
} }
......
...@@ -35,6 +35,7 @@ public class JwtUtil { ...@@ -35,6 +35,7 @@ public class JwtUtil {
String token= JWT.create() String token= JWT.create()
.withHeader(map) //添加头部 .withHeader(map) //添加头部
//可以把数据存在claim中 //可以把数据存在claim中
.withClaim("userId",user.getUserId())
.withClaim("userName",user.getUserName()) .withClaim("userName",user.getUserName())
.withClaim("password",user.getPassword()) .withClaim("password",user.getPassword())
.withExpiresAt(expireDate) //超时设置,设置过期的日期 .withExpiresAt(expireDate) //超时设置,设置过期的日期
......
...@@ -4,14 +4,18 @@ import lombok.Data; ...@@ -4,14 +4,18 @@ import lombok.Data;
@Data @Data
public class LoginUser { public class LoginUser {
private String userId;
private String userName; private String userName;
private String password; private String password;
public LoginUser() { public LoginUser() {
} }
public LoginUser(String userName, String password) { public LoginUser(String userId,String userName, String password) {
this.userId = userId;
this.userName = userName; this.userName = userName;
this.password = password; this.password = password;
} }
} }
package iot.sixiang.license.jwt;
/**
* 存储/获取当前线程的用户信息工具类
*/
public abstract class UserUtils {
//线程变量,存放user实体类信息,即使是静态的与其他线程也是隔离的
private static ThreadLocal<LoginUser> userThreadLocal = new ThreadLocal<LoginUser>();
//从当前线程变量中获取用户信息
public static LoginUser getLoginUser() {
LoginUser user = userThreadLocal.get();
return user;
}
/**
* 获取当前登录用户的ID
* 未登录返回null
*
* @return
*/
public static String getLoginUserId() {
LoginUser user = userThreadLocal.get();
if (user != null && user.getUserId() != null) {
return user.getUserId();
}
return null;
}
//为当前的线程变量赋值上用户信息
public static void setLoginUser(LoginUser user) {
userThreadLocal.set(user);
}
//清除线程变量
public static void removeUser() {
userThreadLocal.remove();
}
}
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