package com.kidgrow.authclient.util;
|
|
import com.kidgrow.common.constant.CommonConstant;
|
import com.kidgrow.common.model.SysUser;
|
import com.kidgrow.common.utils.AesUtils;
|
import lombok.extern.slf4j.Slf4j;
|
import org.springframework.security.core.Authentication;
|
import org.springframework.security.oauth2.common.OAuth2AccessToken;
|
import org.springframework.security.oauth2.common.exceptions.UnapprovedClientAuthenticationException;
|
|
import javax.servlet.http.HttpServletRequest;
|
import java.util.Enumeration;
|
|
/**
|
* 石家庄喜高科技有限责任公司 版权所有 © Copyright 2020<br>
|
*
|
* @Description: 认证授权工具类<br>
|
* @Project: <br>
|
* @CreateDate: Created in 2020/2/13 11:43 <br>
|
* @Author: <a href="4345453@kidgrow.com">liuke</a>
|
*/
|
@Slf4j
|
public class AuthUtils {
|
private AuthUtils() {
|
throw new IllegalStateException("Utility class");
|
}
|
|
private static final String BASIC_ = "Basic ";
|
|
/**
|
* 获取requet(head/param)中的token
|
* @param request
|
* @return
|
*/
|
public static String extractToken(HttpServletRequest request) {
|
String token = extractHeaderToken(request);
|
if (token == null) {
|
token = request.getParameter(OAuth2AccessToken.ACCESS_TOKEN);
|
if (token == null) {
|
log.debug("Token not found in request parameters. Not an OAuth2 request.");
|
}
|
}
|
return token;
|
}
|
|
/**
|
* 解析head中的token
|
* @param request
|
* @return
|
*/
|
private static String extractHeaderToken(HttpServletRequest request) {
|
Enumeration<String> headers = request.getHeaders(CommonConstant.TOKEN_HEADER);
|
while (headers.hasMoreElements()) {
|
String value = headers.nextElement();
|
if ((value.startsWith(OAuth2AccessToken.BEARER_TYPE))) {
|
String authHeaderValue = value.substring(OAuth2AccessToken.BEARER_TYPE.length()).trim();
|
int commaIndex = authHeaderValue.indexOf(',');
|
if (commaIndex > 0) {
|
authHeaderValue = authHeaderValue.substring(0, commaIndex);
|
}
|
return authHeaderValue;
|
}
|
}
|
return null;
|
}
|
|
/**
|
* *从header 请求中的clientId:clientSecret
|
*/
|
public static String[] extractClient(HttpServletRequest request) {
|
String header = request.getHeader("Authorization");
|
if (header == null || !header.startsWith(BASIC_)) {
|
throw new UnapprovedClientAuthenticationException("请求头中client信息为空");
|
}
|
return extractHeaderClient(header);
|
}
|
|
/**
|
* 从header 请求中的clientId:clientSecret
|
*
|
* @param header header中的参数
|
*/
|
public static String[] extractHeaderClient(String header) {
|
String clientStr = null;
|
try{
|
clientStr = AesUtils.desEncrypt(header.substring(BASIC_.length()));
|
}catch(Exception w){
|
log.error("Header解密失败", w);
|
}
|
String[] clientArr = clientStr.split(":");
|
if (clientArr.length != 2) {
|
throw new RuntimeException("Invalid basic authentication token");
|
}
|
return clientArr;
|
}
|
|
/**
|
* 获取登陆的用户名
|
*/
|
public static String getUsername(Authentication authentication) {
|
Object principal = authentication.getPrincipal();
|
String username = null;
|
if (principal instanceof SysUser) {
|
username = ((SysUser) principal).getUsername();
|
} else if (principal instanceof String) {
|
username = (String) principal;
|
}
|
return username;
|
}
|
}
|