¶Ô±ÈÐÂÎļþ |
| | |
| | | /* |
| | | * Copyright (c) 2018-2028, Chill Zhuang All rights reserved. |
| | | * |
| | | * Redistribution and use in source and binary forms, with or without |
| | | * modification, are permitted provided that the following conditions are met: |
| | | * |
| | | * Redistributions of source code must retain the above copyright notice, |
| | | * this list of conditions and the following disclaimer. |
| | | * Redistributions in binary form must reproduce the above copyright |
| | | * notice, this list of conditions and the following disclaimer in the |
| | | * documentation and/or other materials provided with the distribution. |
| | | * Neither the name of the dreamlu.net developer nor the names of its |
| | | * contributors may be used to endorse or promote products derived from |
| | | * this software without specific prior written permission. |
| | | * Author: Chill åºéª (smallchill@163.com) |
| | | */ |
| | | package org.springblade.core.secure.utils; |
| | | |
| | | import io.jsonwebtoken.Claims; |
| | | import org.springblade.core.jwt.JwtUtil; |
| | | import org.springblade.core.jwt.props.JwtProperties; |
| | | import org.springblade.core.launch.constant.TokenConstant; |
| | | import org.springblade.core.secure.BladeUser; |
| | | import org.springblade.core.tool.constant.RoleConstant; |
| | | import org.springblade.core.tool.support.Kv; |
| | | import org.springblade.core.tool.utils.*; |
| | | |
| | | import javax.servlet.http.HttpServletRequest; |
| | | import java.util.Map; |
| | | import java.util.Objects; |
| | | |
| | | /** |
| | | * Authå·¥å
·ç±» |
| | | * |
| | | * @author Chill |
| | | */ |
| | | public class AuthUtil { |
| | | private static final String BLADE_USER_REQUEST_ATTR = "_BLADE_USER_REQUEST_ATTR_"; |
| | | |
| | | private final static String HEADER = TokenConstant.HEADER; |
| | | private final static String ACCOUNT = TokenConstant.ACCOUNT; |
| | | private final static String USER_NAME = TokenConstant.USER_NAME; |
| | | private final static String NICK_NAME = TokenConstant.NICK_NAME; |
| | | private final static String USER_ID = TokenConstant.USER_ID; |
| | | private final static String DEPT_ID = TokenConstant.DEPT_ID; |
| | | private final static String POST_ID = TokenConstant.POST_ID; |
| | | private final static String ROLE_ID = TokenConstant.ROLE_ID; |
| | | private final static String ROLE_NAME = TokenConstant.ROLE_NAME; |
| | | private final static String TENANT_ID = TokenConstant.TENANT_ID; |
| | | private final static String OAUTH_ID = TokenConstant.OAUTH_ID; |
| | | private final static String CLIENT_ID = TokenConstant.CLIENT_ID; |
| | | private final static String DETAIL = TokenConstant.DETAIL; |
| | | |
| | | private static JwtProperties jwtProperties; |
| | | |
| | | /** |
| | | * è·åé
置类 |
| | | * |
| | | * @return jwtProperties |
| | | */ |
| | | private static JwtProperties getJwtProperties() { |
| | | if (jwtProperties == null) { |
| | | jwtProperties = SpringUtil.getBean(JwtProperties.class); |
| | | } |
| | | return jwtProperties; |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·ä¿¡æ¯ |
| | | * |
| | | * @return BladeUser |
| | | */ |
| | | public static BladeUser getUser() { |
| | | HttpServletRequest request = WebUtil.getRequest(); |
| | | if (request == null) { |
| | | return null; |
| | | } |
| | | // ä¼å
ä» request ä¸è·å |
| | | Object bladeUser = request.getAttribute(BLADE_USER_REQUEST_ATTR); |
| | | if (bladeUser == null) { |
| | | bladeUser = getUser(request); |
| | | if (bladeUser != null) { |
| | | // è®¾ç½®å° request ä¸ |
| | | request.setAttribute(BLADE_USER_REQUEST_ATTR, bladeUser); |
| | | } |
| | | } |
| | | return (BladeUser) bladeUser; |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·ä¿¡æ¯ |
| | | * |
| | | * @param request request |
| | | * @return BladeUser |
| | | */ |
| | | @SuppressWarnings("unchecked") |
| | | public static BladeUser getUser(HttpServletRequest request) { |
| | | Claims claims = getClaims(request); |
| | | if (claims == null) { |
| | | return null; |
| | | } |
| | | String clientId = Func.toStr(claims.get(AuthUtil.CLIENT_ID)); |
| | | Long userId = Func.toLong(claims.get(AuthUtil.USER_ID)); |
| | | String tenantId = Func.toStr(claims.get(AuthUtil.TENANT_ID)); |
| | | String oauthId = Func.toStr(claims.get(AuthUtil.OAUTH_ID)); |
| | | String deptId = Func.toStrWithEmpty(claims.get(AuthUtil.DEPT_ID), StringPool.MINUS_ONE); |
| | | String postId = Func.toStrWithEmpty(claims.get(AuthUtil.POST_ID), StringPool.MINUS_ONE); |
| | | String roleId = Func.toStrWithEmpty(claims.get(AuthUtil.ROLE_ID), StringPool.MINUS_ONE); |
| | | String account = Func.toStr(claims.get(AuthUtil.ACCOUNT)); |
| | | String roleName = Func.toStr(claims.get(AuthUtil.ROLE_NAME)); |
| | | String userName = Func.toStr(claims.get(AuthUtil.USER_NAME)); |
| | | String nickName = Func.toStr(claims.get(AuthUtil.NICK_NAME)); |
| | | String tenantName = Func.toStr(claims.get("tenantName")); |
| | | String email = Func.toStr(claims.get("email")); |
| | | String deptName = Func.toStr(claims.get("deptName")); |
| | | String secretGrade = Func.toStr(claims.get("secretGrade")); |
| | | Kv detail = Kv.create().setAll((Map<? extends String, ?>) claims.get(AuthUtil.DETAIL)); |
| | | BladeUser bladeUser = new BladeUser(); |
| | | bladeUser.setClientId(clientId); |
| | | bladeUser.setUserId(userId); |
| | | bladeUser.setTenantId(tenantId); |
| | | bladeUser.setOauthId(oauthId); |
| | | bladeUser.setAccount(account); |
| | | bladeUser.setDeptId(deptId); |
| | | bladeUser.setPostId(postId); |
| | | bladeUser.setRoleId(roleId); |
| | | bladeUser.setRoleName(roleName); |
| | | bladeUser.setUserName(userName); |
| | | bladeUser.setNickName(nickName); |
| | | detail.put("tenantName",tenantName); |
| | | detail.put("deptName",deptName); |
| | | detail.put("email",email); |
| | | detail.put("secretGrade",secretGrade); |
| | | bladeUser.setDetail(detail); |
| | | return bladeUser; |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦ä¸ºè¶
管 |
| | | * |
| | | * @return boolean |
| | | */ |
| | | public static boolean isAdministrator() { |
| | | return StringUtil.containsAny(getUserRole(), RoleConstant.ADMINISTRATOR); |
| | | } |
| | | |
| | | /** |
| | | * æ¯å¦ä¸ºç®¡çå |
| | | * |
| | | * @return boolean |
| | | */ |
| | | public static boolean isAdmin() { |
| | | return StringUtil.containsAny(getUserRole(), RoleConstant.ADMIN); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·id |
| | | * |
| | | * @return userId |
| | | */ |
| | | public static Long getUserId() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? -1 : user.getUserId(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·id |
| | | * |
| | | * @param request request |
| | | * @return userId |
| | | */ |
| | | public static Long getUserId(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? -1 : user.getUserId(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·è´¦å· |
| | | * |
| | | * @return userAccount |
| | | */ |
| | | public static String getUserAccount() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? StringPool.EMPTY : user.getAccount(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·è´¦å· |
| | | * |
| | | * @param request request |
| | | * @return userAccount |
| | | */ |
| | | public static String getUserAccount(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? StringPool.EMPTY : user.getAccount(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·å |
| | | * |
| | | * @return userName |
| | | */ |
| | | public static String getUserName() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? StringPool.EMPTY : user.getUserName(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·å |
| | | * |
| | | * @param request request |
| | | * @return userName |
| | | */ |
| | | public static String getUserName(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? StringPool.EMPTY : user.getUserName(); |
| | | } |
| | | |
| | | /** |
| | | * è·åæµç§° |
| | | * |
| | | * @return userName |
| | | */ |
| | | public static String getNickName() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? StringPool.EMPTY : user.getNickName(); |
| | | } |
| | | |
| | | /** |
| | | * è·åæµç§° |
| | | * |
| | | * @param request request |
| | | * @return userName |
| | | */ |
| | | public static String getNickName(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? StringPool.EMPTY : user.getNickName(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·é¨é¨ |
| | | * |
| | | * @return userName |
| | | */ |
| | | public static String getDeptId() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? StringPool.EMPTY : user.getDeptId(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·é¨é¨ |
| | | * |
| | | * @param request request |
| | | * @return userName |
| | | */ |
| | | public static String getDeptId(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? StringPool.EMPTY : user.getDeptId(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·å²ä½ |
| | | * |
| | | * @return userName |
| | | */ |
| | | public static String getPostId() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? StringPool.EMPTY : user.getPostId(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·å²ä½ |
| | | * |
| | | * @param request request |
| | | * @return userName |
| | | */ |
| | | public static String getPostId(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? StringPool.EMPTY : user.getPostId(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·è§è² |
| | | * |
| | | * @return userName |
| | | */ |
| | | public static String getUserRole() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? StringPool.EMPTY : user.getRoleName(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨è§è² |
| | | * |
| | | * @param request request |
| | | * @return userName |
| | | */ |
| | | public static String getUserRole(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? StringPool.EMPTY : user.getRoleName(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç§æ·ID |
| | | * |
| | | * @return tenantId |
| | | */ |
| | | public static String getTenantId() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? StringPool.EMPTY : user.getTenantId(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç§æ·ID |
| | | * |
| | | * @param request request |
| | | * @return tenantId |
| | | */ |
| | | public static String getTenantId(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? StringPool.EMPTY : user.getTenantId(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¬¬ä¸æ¹è®¤è¯ID |
| | | * |
| | | * @return tenantId |
| | | */ |
| | | public static String getOauthId() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? StringPool.EMPTY : user.getOauthId(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¬¬ä¸æ¹è®¤è¯ID |
| | | * |
| | | * @param request request |
| | | * @return tenantId |
| | | */ |
| | | public static String getOauthId(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? StringPool.EMPTY : user.getOauthId(); |
| | | } |
| | | |
| | | /** |
| | | * è·å客æ·ç«¯id |
| | | * |
| | | * @return clientId |
| | | */ |
| | | public static String getClientId() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? StringPool.EMPTY : user.getClientId(); |
| | | } |
| | | |
| | | /** |
| | | * è·å客æ·ç«¯id |
| | | * |
| | | * @param request request |
| | | * @return clientId |
| | | */ |
| | | public static String getClientId(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? StringPool.EMPTY : user.getClientId(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·è¯¦æ
|
| | | * |
| | | * @return clientId |
| | | */ |
| | | public static Kv getDetail() { |
| | | BladeUser user = getUser(); |
| | | return (null == user) ? Kv.create() : user.getDetail(); |
| | | } |
| | | |
| | | /** |
| | | * è·åç¨æ·è¯¦æ
|
| | | * |
| | | * @param request request |
| | | * @return clientId |
| | | */ |
| | | public static Kv getDetail(HttpServletRequest request) { |
| | | BladeUser user = getUser(request); |
| | | return (null == user) ? Kv.create() : user.getDetail(); |
| | | } |
| | | |
| | | /** |
| | | * è·åClaims |
| | | * |
| | | * @param request request |
| | | * @return Claims |
| | | */ |
| | | public static Claims getClaims(HttpServletRequest request) { |
| | | String auth = request.getHeader(AuthUtil.HEADER); |
| | | Claims claims = null; |
| | | String token; |
| | | // è·å Token åæ° |
| | | if (StringUtil.isNotBlank(auth)) { |
| | | token = JwtUtil.getToken(auth); |
| | | } else { |
| | | String parameter = request.getParameter(AuthUtil.HEADER); |
| | | token = JwtUtil.getToken(parameter); |
| | | } |
| | | // è·å Token å¼ |
| | | if (StringUtil.isNotBlank(token)) { |
| | | claims = AuthUtil.parseJWT(token); |
| | | } |
| | | // 夿 Token ç¶æ |
| | | if (ObjectUtil.isNotEmpty(claims) && getJwtProperties().getState()) { |
| | | String tenantId = Func.toStr(claims.get(AuthUtil.TENANT_ID)); |
| | | String userId = Func.toStr(claims.get(AuthUtil.USER_ID)); |
| | | String accessToken = JwtUtil.getAccessToken(tenantId, userId, token); |
| | | if (!token.equalsIgnoreCase(accessToken)) { |
| | | return null; |
| | | } |
| | | } |
| | | return claims; |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±å¤´ |
| | | * |
| | | * @return header |
| | | */ |
| | | public static String getHeader() { |
| | | return getHeader(Objects.requireNonNull(WebUtil.getRequest())); |
| | | } |
| | | |
| | | /** |
| | | * è·å请æ±å¤´ |
| | | * |
| | | * @param request request |
| | | * @return header |
| | | */ |
| | | public static String getHeader(HttpServletRequest request) { |
| | | return request.getHeader(HEADER); |
| | | } |
| | | |
| | | /** |
| | | * è§£æjsonWebToken |
| | | * |
| | | * @param jsonWebToken jsonWebToken |
| | | * @return Claims |
| | | */ |
| | | public static Claims parseJWT(String jsonWebToken) { |
| | | return JwtUtil.parseJWT(jsonWebToken); |
| | | } |
| | | |
| | | } |