From cf1696e0d6f148445bb21dca6f066d8e07bc3234 Mon Sep 17 00:00:00 2001
From: 648540858 <648540858@qq.com>
Date: 星期六, 15 四月 2023 09:03:41 +0800
Subject: [PATCH] 修复使用jwt后导致的用户管理功能异常
---
/dev/null | 36 ------------------
src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java | 10 ++++
src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java | 5 ++
src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java | 10 -----
src/main/java/com/genersoft/iot/vmp/conf/security/SecurityUtils.java | 10 +---
src/main/java/com/genersoft/iot/vmp/conf/security/dto/JwtUser.java | 10 +++++
src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java | 2
README.md | 3 +
8 files changed, 29 insertions(+), 57 deletions(-)
diff --git a/README.md b/README.md
index 9f80367..d3ad3ac 100644
--- a/README.md
+++ b/README.md
@@ -117,7 +117,8 @@
# 鎺堟潈鍗忚
鏈」鐩嚜鏈変唬鐮佷娇鐢ㄥ鏉剧殑MIT鍗忚锛屽湪淇濈暀鐗堟潈淇℃伅鐨勬儏鍐典笅鍙互鑷敱搴旂敤浜庡悇鑷晢鐢ㄣ�侀潪鍟嗕笟鐨勯」鐩�� 浣嗘槸鏈」鐩篃闆剁鐨勪娇鐢ㄤ簡涓�浜涘叾浠栫殑寮�婧愪唬鐮侊紝鍦ㄥ晢鐢ㄧ殑鎯呭喌涓嬭鑷鏇夸唬鎴栧墧闄わ紱 鐢变簬浣跨敤鏈」鐩�屼骇鐢熺殑鍟嗕笟绾犵悍鎴栦镜鏉冭涓轰竴姒備笌鏈」鐩強寮�鍙戣�呮棤鍏筹紝璇疯嚜琛屾壙鎷呮硶寰嬮闄┿�� 鍦ㄤ娇鐢ㄦ湰椤圭洰浠g爜鏃讹紝涔熷簲璇ュ湪鎺堟潈鍗忚涓悓鏃惰〃鏄庢湰椤圭洰渚濊禆鐨勭涓夋柟搴撶殑鍗忚
-# 浠樿垂鎶�鏈敮鎸�
+# 鎶�鏈敮鎸�
+寤鸿鍔犲叆[鐭ヨ瘑鏄熺悆](https://t.zsxq.com/0drbw002x)鍙互鑾峰彇鏇村鐨勬暀绋嬩互鍙婃洿鍔犲強鏃剁殑鍥炲銆�
濡傛灉椤圭洰闇�瑕佷竴瀵逛竴鐨勬妧鏈敮鎸侊紝鎴栬�呮鎵嬬殑闂闇�瑕佽В鍐筹紝璇峰彂閫侀偖浠跺埌648540858@qq.com
# 鑷磋阿
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java b/src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java
index 27151ee..f35b5bd 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/JwtAuthenticationFilter.java
@@ -2,6 +2,8 @@
import com.genersoft.iot.vmp.conf.UserSetting;
import com.genersoft.iot.vmp.conf.security.dto.JwtUser;
+import com.genersoft.iot.vmp.storager.dao.dto.Role;
+import com.genersoft.iot.vmp.storager.dao.dto.User;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
@@ -75,7 +77,13 @@
}
// 鏋勫缓UsernamePasswordAuthenticationToken,杩欓噷瀵嗙爜涓簄ull锛屾槸鍥犱负鎻愪緵浜嗘纭殑JWT,瀹炵幇鑷姩鐧诲綍
- UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, jwtUser.getPassword(), new ArrayList<>() );
+ User user = new User();
+ user.setUsername(jwtUser.getUserName());
+ user.setPassword(jwtUser.getPassword());
+ Role role = new Role();
+ role.setId(jwtUser.getRoleId());
+ user.setRole(role);
+ UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(user, jwtUser.getPassword(), new ArrayList<>() );
SecurityContextHolder.getContext().setAuthentication(token);
chain.doFilter(request, response);
}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java b/src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java
index 57911b0..c9c7b68 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/JwtUtils.java
@@ -37,7 +37,7 @@
*/
public static final long expirationTime = 30;
- public static String createToken(String username, String password) {
+ public static String createToken(String username, String password, Integer roleId) {
try {
/**
* 鈥渋ss鈥� (issuer) 鍙戣浜�
@@ -64,6 +64,7 @@
//娣诲姞鑷畾涔夊弬鏁�,蹇呴』鏄瓧绗︿覆绫诲瀷
claims.setClaim("username", username);
claims.setClaim("password", password);
+ claims.setClaim("roleId", roleId);
//jws
JsonWebSignature jws = new JsonWebSignature();
@@ -118,8 +119,10 @@
String username = (String) claims.getClaimValue("username");
String password = (String) claims.getClaimValue("password");
+ Long roleId = (Long) claims.getClaimValue("roleId");
jwtUser.setUserName(username);
jwtUser.setPassword(password);
+ jwtUser.setRoleId(roleId.intValue());
return jwtUser;
} catch (InvalidJwtException e) {
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/LoginFailureHandler.java b/src/main/java/com/genersoft/iot/vmp/conf/security/LoginFailureHandler.java
deleted file mode 100644
index 9bbf2e7..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/LoginFailureHandler.java
+++ /dev/null
@@ -1,65 +0,0 @@
-package com.genersoft.iot.vmp.conf.security;
-
-import com.fasterxml.jackson.databind.ObjectMapper;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.beans.factory.annotation.Autowired;
-import org.springframework.security.authentication.*;
-import org.springframework.security.core.AuthenticationException;
-import org.springframework.security.web.authentication.AuthenticationFailureHandler;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-import java.util.HashMap;
-import java.util.Map;
-
-@Component
-public class LoginFailureHandler implements AuthenticationFailureHandler {
-
- private final static Logger logger = LoggerFactory.getLogger(LoginFailureHandler.class);
-
- @Autowired
- private ObjectMapper objectMapper;
-
- @Override
- public void onAuthenticationFailure(HttpServletRequest request, HttpServletResponse response, AuthenticationException e) throws IOException, ServletException {
-
- String username = request.getParameter("username");
- if (e instanceof AccountExpiredException) {
- // 璐﹀彿杩囨湡
- logger.info("[鐧诲綍澶辫触] - 鐢ㄦ埛[{}]璐﹀彿杩囨湡", username);
-
- } else if (e instanceof BadCredentialsException) {
- // 瀵嗙爜閿欒
- logger.info("[鐧诲綍澶辫触] - 鐢ㄦ埛[{}]瀵嗙爜/SIP鏈嶅姟鍣↖D 閿欒", username);
-
- } else if (e instanceof CredentialsExpiredException) {
- // 瀵嗙爜杩囨湡
- logger.info("[鐧诲綍澶辫触] - 鐢ㄦ埛[{}]瀵嗙爜杩囨湡", username);
-
- } else if (e instanceof DisabledException) {
- // 鐢ㄦ埛琚鐢�
- logger.info("[鐧诲綍澶辫触] - 鐢ㄦ埛[{}]琚鐢�", username);
-
- } else if (e instanceof LockedException) {
- // 鐢ㄦ埛琚攣瀹�
- logger.info("[鐧诲綍澶辫触] - 鐢ㄦ埛[{}]琚攣瀹�", username);
-
- } else if (e instanceof InternalAuthenticationServiceException) {
- // 鍐呴儴閿欒
- logger.error(String.format("[鐧诲綍澶辫触] - [%s]鍐呴儴閿欒", username), e);
-
- } else {
- // 鍏朵粬閿欒
- logger.error(String.format("[鐧诲綍澶辫触] - [%s]鍏朵粬閿欒", username), e);
- }
- Map<String, Object> map = new HashMap<>();
- map.put("code","0");
- map.put("msg","鐧诲綍澶辫触");
- response.setContentType("application/json;charset=UTF-8");
- response.getWriter().write(objectMapper.writeValueAsString(map));
- }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/LoginSuccessHandler.java b/src/main/java/com/genersoft/iot/vmp/conf/security/LoginSuccessHandler.java
deleted file mode 100644
index d26342e..0000000
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/LoginSuccessHandler.java
+++ /dev/null
@@ -1,36 +0,0 @@
-package com.genersoft.iot.vmp.conf.security;
-
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-import org.springframework.security.core.Authentication;
-import org.springframework.security.web.authentication.AuthenticationSuccessHandler;
-import org.springframework.stereotype.Component;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import java.io.IOException;
-
-/**
- * @author lin
- */
-@Component
-public class LoginSuccessHandler implements AuthenticationSuccessHandler {
-
- private final static Logger logger = LoggerFactory.getLogger(LoginSuccessHandler.class);
-
- @Override
- public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse httpServletResponse, Authentication authentication) throws IOException, ServletException {
-// String username = request.getParameter("username");
-// httpServletResponse.setContentType("application/json;charset=UTF-8");
-// // 鐢熸垚JWT锛屽苟鏀剧疆鍒拌姹傚ご涓�
-// String jwt = JwtUtils.createToken(authentication.getName(), );
-// httpServletResponse.setHeader(JwtUtils.getHeader(), jwt);
-// ServletOutputStream outputStream = httpServletResponse.getOutputStream();
-// outputStream.write(JSON.toJSONString(ErrorCode.SUCCESS).getBytes(StandardCharsets.UTF_8));
-// outputStream.flush();
-// outputStream.close();
-
-// logger.info("[鐧诲綍鎴愬姛] - [{}]", username);
- }
-}
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/SecurityUtils.java b/src/main/java/com/genersoft/iot/vmp/conf/security/SecurityUtils.java
index a8d3568..f012f7e 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/SecurityUtils.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/SecurityUtils.java
@@ -53,14 +53,10 @@
Authentication authentication = getAuthentication();
if(authentication!=null){
Object principal = authentication.getPrincipal();
- if(principal!=null && !"anonymousUser".equals(principal)){
-// LoginUser user = (LoginUser) authentication.getPrincipal();
+ if(principal!=null && !"anonymousUser".equals(principal.toString())){
- String username = (String) principal;
- User user = new User();
- user.setUsername(username);
- LoginUser loginUser = new LoginUser(user, LocalDateTime.now());
- return loginUser;
+ User user = (User) principal;
+ return new LoginUser(user, LocalDateTime.now());
}
}
return null;
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java b/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
index 96ae6b9..1fbe3a4 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/WebSecurityConfig.java
@@ -47,16 +47,6 @@
* 鐧诲嚭鎴愬姛鐨勫鐞�
*/
@Autowired
- private LoginFailureHandler loginFailureHandler;
- /**
- * 鐧诲綍鎴愬姛鐨勫鐞�
- */
- @Autowired
- private LoginSuccessHandler loginSuccessHandler;
- /**
- * 鐧诲嚭鎴愬姛鐨勫鐞�
- */
- @Autowired
private LogoutHandler logoutHandler;
/**
* 鏈櫥褰曠殑澶勭悊
diff --git a/src/main/java/com/genersoft/iot/vmp/conf/security/dto/JwtUser.java b/src/main/java/com/genersoft/iot/vmp/conf/security/dto/JwtUser.java
index 1639d1f..8921a30 100644
--- a/src/main/java/com/genersoft/iot/vmp/conf/security/dto/JwtUser.java
+++ b/src/main/java/com/genersoft/iot/vmp/conf/security/dto/JwtUser.java
@@ -25,6 +25,8 @@
private String password;
+ private int roleId;
+
private TokenStatus status;
public String getUserName() {
@@ -50,4 +52,12 @@
public void setPassword(String password) {
this.password = password;
}
+
+ public int getRoleId() {
+ return roleId;
+ }
+
+ public void setRoleId(int roleId) {
+ this.roleId = roleId;
+ }
}
diff --git a/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java b/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
index 157a3a8..5ffb02c 100644
--- a/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
+++ b/src/main/java/com/genersoft/iot/vmp/vmanager/user/UserController.java
@@ -57,7 +57,7 @@
if (user == null) {
throw new ControllerException(ErrorCode.ERROR100.getCode(), "鐢ㄦ埛鍚嶆垨瀵嗙爜閿欒");
}else {
- String jwt = JwtUtils.createToken(username, password);
+ String jwt = JwtUtils.createToken(username, password, user.getRole().getId());
response.setHeader(JwtUtils.getHeader(), jwt);
user.setAccessToken(jwt);
}
--
Gitblit v1.8.0