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