diff --git a/cdp-common/cdp-common-core/src/main/java/com/baiye/core/util/IPUtil.java b/cdp-common/cdp-common-core/src/main/java/com/baiye/core/util/IPUtil.java index 08943a2..765b8d9 100644 --- a/cdp-common/cdp-common-core/src/main/java/com/baiye/core/util/IPUtil.java +++ b/cdp-common/cdp-common-core/src/main/java/com/baiye/core/util/IPUtil.java @@ -1,15 +1,13 @@ package com.baiye.core.util; -import cn.hutool.core.util.IdUtil; import cn.hutool.http.HttpRequest; import cn.hutool.json.JSONObject; -import com.google.common.collect.Lists; import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; +import org.springframework.web.context.request.RequestContextHolder; +import org.springframework.web.context.request.ServletRequestAttributes; -import java.util.ArrayList; -import java.util.List; -import java.util.stream.Collectors; +import javax.servlet.http.HttpServletRequest; /** * IP工具类 @@ -19,33 +17,69 @@ import java.util.stream.Collectors; @Slf4j public class IPUtil { - private static final boolean ipLocal = false; - - /** - * 根据ip获取详细地址 - */ - public static String getCityInfo(String ip) { - if (ipLocal) { - //待开发 - return null; - } else { - return getHttpCityInfo(ip); - } - } - - /** - * 根据ip获取详细地址 - * 临时使用,待调整 - */ - public static String getHttpCityInfo(String ip) { - String api = String.format("http://whois.pconline.com.cn/ipJson.jsp?ip=%s&json=true", ip); - String body = HttpRequest.get(api).execute().charset("GBK").body(); - return (String) new JSONObject(body).get("addr"); - } - - public static void main(String[] args) { - ArrayList strings = Lists.newArrayList("", "1"); - List collect = strings.stream().filter(s -> StringUtils.isNotBlank(s)).collect(Collectors.toList()); - System.out.printf(""); - } + private static final boolean ipLocal = false; + + + public static final String UNKNOWN = "unknown"; + public static final int LENGTH = 15; + + /** + * 根据ip获取详细地址 + */ + public static String getCityInfo(String ip) { + if (ipLocal) { + //待开发 + return null; + } else { + return getHttpCityInfo(ip); + } + } + + /** + * 根据ip获取详细地址 + * 临时使用,待调整 + */ + public static String getHttpCityInfo(String ip) { + String api = String.format("http://whois.pconline.com.cn/ipJson.jsp?ip=%s&json=true", ip); + String body = HttpRequest.get(api).execute().charset("GBK").body(); + return (String) new JSONObject(body).get("addr"); + } + + /** + * 获取IP地址 使用Nginx等反向代理软件, 则不能通过request.getRemoteAddr()获取IP地址 如果使用了多级反向代理的话,X-Forwarded-For的值并不止一个,而是一串IP地址, + * X-Forwarded-For中第一个非unknown的有效IP字符串,则为真实IP地址 + */ + public static String getIpAddress() { + String ip = null; + try { + HttpServletRequest request = + ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); + ip = request.getHeader("x-forwarded-for"); + if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader("Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || ip.length() == 0 || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader("WL-Proxy-Client-IP"); + } + if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_CLIENT_IP"); + } + if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getHeader("HTTP_X_FORWARDED_FOR"); + } + if (StringUtils.isEmpty(ip) || UNKNOWN.equalsIgnoreCase(ip)) { + ip = request.getRemoteAddr(); + } + } catch (Exception e) { + log.error("IpUtils ERROR ", e); + } + // 使用代理,则获取第一个IP地址 + if (StringUtils.isNotEmpty(ip) && ip.length() > LENGTH) { + if (ip.indexOf(",") > 0) { + ip = ip.substring(0, ip.indexOf(",")); + } + } + return ip; + } + } diff --git a/cdp-common/cdp-common-core/src/main/java/com/baiye/core/util/RedisUtils.java b/cdp-common/cdp-common-core/src/main/java/com/baiye/core/util/RedisUtils.java index 41ee4f7..5d40d17 100644 --- a/cdp-common/cdp-common-core/src/main/java/com/baiye/core/util/RedisUtils.java +++ b/cdp-common/cdp-common-core/src/main/java/com/baiye/core/util/RedisUtils.java @@ -16,7 +16,7 @@ import java.util.*; import java.util.concurrent.TimeUnit; /** - * + * * @description redis工具类 * @author Enzo * @date 2020-07-29 18:13 @@ -693,4 +693,19 @@ public class RedisUtils { log.debug("缓存删除数量:" + count + "个"); log.debug("--------------------------------------------"); } + + /** + * 递增 + * + * @param k + * @param delta 要增加几(大于0) + * @return + */ + public long increment(String k, long delta) { + if (delta < 0) { + throw new RuntimeException("递增因子必须大于0"); + } + return redisTemplate.opsForValue().increment(k, delta); + } + } diff --git a/cdp-common/cdp-common-security/src/main/java/com/baiye/component/CustomizeUserAuthenticationConverter.java b/cdp-common/cdp-common-security/src/main/java/com/baiye/component/CustomizeUserAuthenticationConverter.java index 58a7e1a..37b679e 100644 --- a/cdp-common/cdp-common-security/src/main/java/com/baiye/component/CustomizeUserAuthenticationConverter.java +++ b/cdp-common/cdp-common-security/src/main/java/com/baiye/component/CustomizeUserAuthenticationConverter.java @@ -43,7 +43,7 @@ public class CustomizeUserAuthenticationConverter implements UserAuthenticationC public Authentication extractAuthentication(Map map) { if (map.containsKey(USERNAME)) { Collection authorities = getAuthorities(map); - Integer id = (Integer) map.get(SecurityConstants.DETAILS_USER_ID); + String id = map.get(SecurityConstants.DETAILS_USER_ID).toString(); String username = (String) map.get(SecurityConstants.DETAILS_USERNAME); // TODO: 2020/8/10 获取dataScopes /*LoginUser loginUser = new LoginUser(userId,username,N_A,true,true,true,true, diff --git a/cdp-common/cdp-common-security/src/main/java/com/baiye/component/ResourceAuthExceptionEntryPoint.java b/cdp-common/cdp-common-security/src/main/java/com/baiye/component/ResourceAuthExceptionEntryPoint.java index 4c0b028..3eb3171 100644 --- a/cdp-common/cdp-common-security/src/main/java/com/baiye/component/ResourceAuthExceptionEntryPoint.java +++ b/cdp-common/cdp-common-security/src/main/java/com/baiye/component/ResourceAuthExceptionEntryPoint.java @@ -34,7 +34,7 @@ public class ResourceAuthExceptionEntryPoint implements AuthenticationEntryPoint Map result = new HashMap<>(6); result.put("code", HttpStatus.UNAUTHORIZED.value()); if (e!=null){ - result.put("msg","error"); + result.put("message",ResultCode.USER_ACCOUNT_EXPIRED.getMsg()); result.put("data", ResultCode.USER_ACCOUNT_EXPIRED.getMsg()); } response.setStatus(HttpStatus.UNAUTHORIZED.value()); diff --git a/cdp-common/cdp-common-security/src/main/java/com/baiye/config/ResourceServerSecurityConfig.java b/cdp-common/cdp-common-security/src/main/java/com/baiye/config/ResourceServerSecurityConfig.java index e19f0c9..81d9f4f 100644 --- a/cdp-common/cdp-common-security/src/main/java/com/baiye/config/ResourceServerSecurityConfig.java +++ b/cdp-common/cdp-common-security/src/main/java/com/baiye/config/ResourceServerSecurityConfig.java @@ -3,6 +3,8 @@ package com.baiye.config; import com.baiye.component.CustomizeBearerTokenExtractor; import com.baiye.component.CustomizeUserAuthenticationConverter; import com.baiye.component.ResourceAuthExceptionEntryPoint; +import com.baiye.core.util.RedisUtils; +import com.baiye.handle.CustomAuthenticationFailureHandler; import lombok.RequiredArgsConstructor; import org.springframework.context.annotation.Bean; import org.springframework.security.config.annotation.web.builders.HttpSecurity; @@ -28,14 +30,18 @@ import org.springframework.web.client.RestTemplate; @RequiredArgsConstructor public class ResourceServerSecurityConfig extends ResourceServerConfigurerAdapter { + private final CustomAuthenticationFailureHandler customAuthenticationFailureHandler; + /** * 没有权限的时候的异常处理 */ private final ResourceAuthExceptionEntryPoint exceptionEntryPoint; + private final RemoteTokenServices remoteTokenServices; + /** * 权限不足时的异常处理 */ @@ -56,6 +62,9 @@ public class ResourceServerSecurityConfig extends ResourceServerConfigurerAdapte */ private final CustomizeBearerTokenExtractor bearerTokenExtractor; + + private final RedisUtils redisUtils; + @Bean GrantedAuthorityDefaults grantedAuthorityDefaults() { // 去除 ROLE_ 前缀 @@ -95,4 +104,6 @@ public class ResourceServerSecurityConfig extends ResourceServerConfigurerAdapte registry.anyRequest().authenticated() .and().csrf().disable(); } + + } diff --git a/cdp-iaas/authorization-server/src/main/java/com/baiye/controller/SmsController.java b/cdp-iaas/authorization-server/src/main/java/com/baiye/controller/SmsController.java index aa8b3d1..2ecea36 100644 --- a/cdp-iaas/authorization-server/src/main/java/com/baiye/controller/SmsController.java +++ b/cdp-iaas/authorization-server/src/main/java/com/baiye/controller/SmsController.java @@ -1,17 +1,23 @@ package com.baiye.controller; -import com.baiye.service.SmsService; +import com.baiye.BadRequestException; import com.baiye.core.base.api.Result; import com.baiye.core.util.MobileUtil; +import com.baiye.service.SmsService; import io.swagger.annotations.Api; import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; import org.apache.commons.lang3.StringUtils; -import org.springframework.web.bind.annotation.*; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RequestParam; +import org.springframework.web.bind.annotation.RestController; /** * @author Enzo * @date : 2023/3/15 */ +@Slf4j @RestController @RequestMapping("/sms") @Api(value = "阿里云短信服务") @@ -21,12 +27,12 @@ public class SmsController { private final SmsService smsService; @GetMapping("/getCode") - @ResponseBody public Result sendSMS(@RequestParam String mobile) { if (StringUtils.isBlank(mobile) || !MobileUtil.checkPhone(mobile)) { - return Result.fail("发送短信失败"); + throw new BadRequestException("发送短信失败"); } return Boolean.TRUE.equals(smsService.sendSms(mobile)) ? Result.success() : Result.fail(); } + } diff --git a/cdp-iaas/authorization-server/src/main/java/com/baiye/sms/SmsCodeAuthenticationFilter.java b/cdp-iaas/authorization-server/src/main/java/com/baiye/sms/SmsCodeAuthenticationFilter.java index 05445a6..4c56ca8 100644 --- a/cdp-iaas/authorization-server/src/main/java/com/baiye/sms/SmsCodeAuthenticationFilter.java +++ b/cdp-iaas/authorization-server/src/main/java/com/baiye/sms/SmsCodeAuthenticationFilter.java @@ -20,61 +20,61 @@ import java.util.Objects; */ public class SmsCodeAuthenticationFilter extends AbstractAuthenticationProcessingFilter { - /** - * 请求中的参数 - */ - private String mobileParameter = Oauth2Constant.DEFAULT_PARAMETER_NAME_MOBILE; + /** + * 请求中的参数 + */ + private String mobileParameter = Oauth2Constant.DEFAULT_PARAMETER_NAME_MOBILE; - private boolean postOnly = true; + private boolean postOnly = true; - public SmsCodeAuthenticationFilter() { - super(new AntPathRequestMatcher(Oauth2Constant.OAUTH_MOBILE, "POST")); - } + public SmsCodeAuthenticationFilter() { + super(new AntPathRequestMatcher(Oauth2Constant.OAUTH_MOBILE, "POST")); + } - @Override - public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { - if (postOnly && !FormSubmitEvent.MethodType.POST.name().equals(request.getMethod())) { - throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod()); - } + @Override + public Authentication attemptAuthentication(HttpServletRequest request, HttpServletResponse response) throws AuthenticationException { + if (postOnly && !FormSubmitEvent.MethodType.POST.name().equals(request.getMethod())) { + throw new AuthenticationServiceException("Authentication method not supported: " + request.getMethod()); + } - // 获取请求中的参数值 - String mobile = obtainMobile(request); + // 获取请求中的参数值 + String mobile = obtainMobile(request); - if (Objects.isNull(mobile)) { - mobile = ""; - } + if (Objects.isNull(mobile)) { + mobile = ""; + } - mobile = mobile.trim(); + mobile = mobile.trim(); - SmsCodeAuthenticationToken authRequest = new SmsCodeAuthenticationToken(mobile); + SmsCodeAuthenticationToken authRequest = new SmsCodeAuthenticationToken(mobile); - // Allow subclasses to set the "details" property - setDetails(request, authRequest); + // Allow subclasses to set the "details" property + setDetails(request, authRequest); - return this.getAuthenticationManager().authenticate(authRequest); - } + return this.getAuthenticationManager().authenticate(authRequest); + } - /** - * 获取手机号 - */ - protected String obtainMobile(HttpServletRequest request) { - return request.getParameter(mobileParameter); - } + /** + * 获取手机号 + */ + protected String obtainMobile(HttpServletRequest request) { + return request.getParameter(mobileParameter); + } - protected void setDetails(HttpServletRequest request, SmsCodeAuthenticationToken authRequest) { - authRequest.setDetails(authenticationDetailsSource.buildDetails(request)); - } + protected void setDetails(HttpServletRequest request, SmsCodeAuthenticationToken authRequest) { + authRequest.setDetails(authenticationDetailsSource.buildDetails(request)); + } - public void setMobileParameter(String mobileParameter) { - Assert.hasText(mobileParameter, "Mobile parameter must not be empty or null"); - this.mobileParameter = mobileParameter; - } + public void setMobileParameter(String mobileParameter) { + Assert.hasText(mobileParameter, "Mobile parameter must not be empty or null"); + this.mobileParameter = mobileParameter; + } - public void setPostOnly(boolean postOnly) { - this.postOnly = postOnly; - } + public void setPostOnly(boolean postOnly) { + this.postOnly = postOnly; + } - public final String getMobileParameter() { - return mobileParameter; - } + public final String getMobileParameter() { + return mobileParameter; + } } diff --git a/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/java/com/baiye/controller/MemberController.java b/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/java/com/baiye/controller/MemberController.java index b26cc50..88935b0 100644 --- a/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/java/com/baiye/controller/MemberController.java +++ b/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/java/com/baiye/controller/MemberController.java @@ -1,15 +1,13 @@ package com.baiye.controller; +import cn.hutool.core.bean.BeanUtil; +import cn.hutool.core.util.ObjectUtil; +import com.baiye.BadRequestException; import com.baiye.Member; -import com.baiye.User; import com.baiye.annotation.Inner; import com.baiye.core.page.PageResult; -import com.baiye.dto.UserDto; -import com.baiye.dto.UserSmallDto; import com.baiye.query.MemberQueryCriteria; -import com.baiye.query.UserQueryCriteria; import com.baiye.service.IMemberService; -import com.baiye.service.IUserService; import com.baiye.util.SecurityUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; @@ -77,4 +75,14 @@ public class MemberController { return ResponseEntity.ok(this.memberService.createOrUpdate(mobile)); } + + @ApiOperation("通过用户id查询用户姓名") + @GetMapping(value = "/info") + public ResponseEntity> queryMemberByUserId(@RequestParam Long id) { + Member member = this.memberService.getById(id); + if (ObjectUtil.isNull(member)){ + return ResponseEntity.ok(BeanUtil.beanToMap(member)); + } + throw new BadRequestException("查询用户失败"); + } } diff --git a/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/java/com/baiye/service/impl/MemberServiceImpl.java b/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/java/com/baiye/service/impl/MemberServiceImpl.java index 12fc1d1..e0eb1b0 100644 --- a/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/java/com/baiye/service/impl/MemberServiceImpl.java +++ b/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/java/com/baiye/service/impl/MemberServiceImpl.java @@ -26,6 +26,7 @@ import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Lists; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.cache.annotation.CacheEvict; @@ -133,7 +134,7 @@ public class MemberServiceImpl extends ServiceImpl impleme @Cacheable(cacheNames = "memberCache", key = "'username:' + #p0") public UserSmallDto getUserDetailsByMobile(String mobile) { UserSmallDto userDetails = this.memberMapper.getUserDetails(mobile); - userDetails.setRoleNames(Collections.emptyList()); + userDetails.setRoleNames(Lists.newArrayList(userDetails.getUsername())); userDetails.setPermissions(Collections.emptyList()); return userDetails; } diff --git a/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/resources/mapper/MemberMapper.xml b/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/resources/mapper/MemberMapper.xml index a0fe519..7cb2d2d 100644 --- a/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/resources/mapper/MemberMapper.xml +++ b/cdp-manager/backstage-manger-server/backstage-manger-server-service/src/main/resources/mapper/MemberMapper.xml @@ -19,7 +19,7 @@ - + @@ -81,7 +81,7 @@