| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277 |
- package cc.mrbird.febs.common.utils;
- import cc.mrbird.febs.common.entity.CurrentUser;
- import cc.mrbird.febs.common.entity.constant.PageConstant;
- import com.alibaba.fastjson.JSONObject;
- import com.baomidou.mybatisplus.core.metadata.IPage;
- import com.fasterxml.jackson.databind.ObjectMapper;
- import lombok.extern.slf4j.Slf4j;
- import org.apache.commons.lang3.StringUtils;
- import org.springframework.core.io.buffer.DataBuffer;
- import org.springframework.http.HttpHeaders;
- import org.springframework.http.HttpStatus;
- import org.springframework.http.server.reactive.ServerHttpRequest;
- import org.springframework.http.server.reactive.ServerHttpResponse;
- import org.springframework.security.core.Authentication;
- import org.springframework.security.core.GrantedAuthority;
- import org.springframework.security.core.context.SecurityContextHolder;
- import org.springframework.security.oauth2.provider.OAuth2Authentication;
- import org.springframework.security.oauth2.provider.authentication.OAuth2AuthenticationDetails;
- import org.springframework.web.context.request.RequestContextHolder;
- import org.springframework.web.context.request.ServletRequestAttributes;
- import reactor.core.publisher.Mono;
- import javax.servlet.http.HttpServletRequest;
- import javax.servlet.http.HttpServletResponse;
- import java.io.IOException;
- import java.util.*;
- import java.util.regex.Matcher;
- import java.util.regex.Pattern;
- import java.util.stream.IntStream;
- /**
- * FEBS工具类
- *
- * @author MrBird
- */
- @Slf4j
- public class FebsUtil {
- /**
- * 驼峰转下划线
- *
- * @param value 待转换值
- * @return 结果
- */
- public static String camelToUnderscore(String value) {
- if (StringUtils.isBlank(value))
- return value;
- String[] arr = StringUtils.splitByCharacterTypeCamelCase(value);
- if (arr.length == 0)
- return value;
- StringBuilder result = new StringBuilder();
- IntStream.range(0, arr.length).forEach(i -> {
- if (i != arr.length - 1)
- result.append(arr[i]).append("_");
- else
- result.append(arr[i]);
- });
- return StringUtils.lowerCase(result.toString());
- }
- /**
- * 下划线转驼峰
- *
- * @param value 待转换值
- * @return 结果
- */
- public static String underscoreToCamel(String value) {
- StringBuilder result = new StringBuilder();
- String[] arr = value.split("_");
- for (String s : arr) {
- result.append((String.valueOf(s.charAt(0))).toUpperCase()).append(s.substring(1));
- }
- return result.toString();
- }
- /**
- * 判断是否为 ajax请求
- *
- * @param request HttpServletRequest
- * @return boolean
- */
- public static boolean isAjaxRequest(HttpServletRequest request) {
- return (request.getHeader("X-Requested-With") != null
- && "XMLHttpRequest".equals(request.getHeader("X-Requested-With")));
- }
- /**
- * 正则校验
- *
- * @param regex 正则表达式字符串
- * @param value 要匹配的字符串
- * @return 正则校验结果
- */
- public static boolean match(String regex, String value) {
- Pattern pattern = Pattern.compile(regex);
- Matcher matcher = pattern.matcher(value);
- return matcher.matches();
- }
- /**
- * 设置响应
- *
- * @param response HttpServletResponse
- * @param contentType content-type
- * @param status http状态码
- * @param value 响应内容
- * @throws IOException IOException
- */
- public static void makeResponse(HttpServletResponse response, String contentType,
- int status, Object value) throws IOException {
- response.setContentType(contentType);
- response.setStatus(status);
- response.getOutputStream().write(JSONObject.toJSONString(value).getBytes());
- }
- /**
- * 设置webflux模型响应
- *
- * @param response ServerHttpResponse
- * @param contentType content-type
- * @param status http状态码
- * @param value 响应内容
- * @return Mono<Void>
- */
- public static Mono<Void> makeWebFluxResponse(ServerHttpResponse response, String contentType,
- HttpStatus status, Object value) {
- response.setStatusCode(status);
- response.getHeaders().add(HttpHeaders.CONTENT_TYPE, contentType);
- DataBuffer dataBuffer = response.bufferFactory().wrap(JSONObject.toJSONString(value).getBytes());
- return response.writeWith(Mono.just(dataBuffer));
- }
- /**
- * 封装前端分页表格所需数据
- *
- * @param pageInfo pageInfo
- * @return Map<String, Object>
- */
- public static Map<String, Object> getDataTable(IPage<?> pageInfo) {
- Map<String, Object> data = new HashMap<>();
- data.put(PageConstant.ROWS, pageInfo.getRecords());
- data.put(PageConstant.TOTAL, pageInfo.getTotal());
- return data;
- }
- /**
- * 获取HttpServletRequest
- *
- * @return HttpServletRequest
- */
- public static HttpServletRequest getHttpServletRequest() {
- return ((ServletRequestAttributes) Objects.requireNonNull(RequestContextHolder.getRequestAttributes())).getRequest();
- }
- /**
- * 获取请求IP
- *
- * @return String IP
- */
- public static String getHttpServletRequestIpAddress() {
- HttpServletRequest request = getHttpServletRequest();
- String ip = request.getHeader("x-forwarded-for");
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getHeader("Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getHeader("WL-Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = request.getRemoteAddr();
- }
- return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
- }
- /**
- * 获取请求IP
- *
- * @param request ServerHttpRequest
- * @return String IP
- */
- public static String getServerHttpRequestIpAddress(ServerHttpRequest request) {
- HttpHeaders headers = request.getHeaders();
- String ip = headers.getFirst("x-forwarded-for");
- if (ip != null && ip.length() != 0 && !"unknown".equalsIgnoreCase(ip)) {
- if (ip.contains(",")) {
- ip = ip.split(",")[0];
- }
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = headers.getFirst("Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = headers.getFirst("WL-Proxy-Client-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = headers.getFirst("HTTP_CLIENT_IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = headers.getFirst("HTTP_X_FORWARDED_FOR");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = headers.getFirst("X-Real-IP");
- }
- if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
- ip = Objects.requireNonNull(request.getRemoteAddress()).getAddress().getHostAddress();
- }
- return "0:0:0:0:0:0:0:1".equals(ip) ? "127.0.0.1" : ip;
- }
- /**
- * 判断是否包含中文
- *
- * @param value 内容
- * @return 结果
- */
- public static boolean containChinese(String value) {
- Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
- Matcher m = p.matcher(value);
- return m.find();
- }
- /**
- * 获取在线用户信息
- *
- * @return CurrentUser 当前用户信息
- */
- public static CurrentUser getCurrentUser() {
- try {
- LinkedHashMap<String, Object> authenticationDetails = getAuthenticationDetails();
- Object principal = authenticationDetails.get("principal");
- ObjectMapper mapper = new ObjectMapper();
- return mapper.readValue(mapper.writeValueAsString(principal), CurrentUser.class);
- } catch (Exception e) {
- log.error("获取当前用户信息失败", e);
- return null;
- }
- }
- /**
- * 获取当前用户名称
- *
- * @return String 用户名
- */
- public static String getCurrentUsername() {
- return (String) getOAuth2Authentication().getPrincipal();
- }
- /**
- * 获取当前用户权限集
- *
- * @return Collection<GrantedAuthority>权限集
- */
- public static Collection<GrantedAuthority> getCurrentUserAuthority() {
- return getOAuth2Authentication().getAuthorities();
- }
- /**
- * 获取当前令牌内容
- *
- * @return String 令牌内容
- */
- public static String getCurrentTokenValue() {
- OAuth2AuthenticationDetails details = (OAuth2AuthenticationDetails) getOAuth2Authentication().getDetails();
- return details.getTokenValue();
- }
- private static OAuth2Authentication getOAuth2Authentication() {
- Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
- return (OAuth2Authentication) authentication;
- }
- @SuppressWarnings("all")
- private static LinkedHashMap<String, Object> getAuthenticationDetails() {
- return (LinkedHashMap<String, Object>) getOAuth2Authentication().getUserAuthentication().getDetails();
- }
- }
|