From 59a1e162407d1672c08794458280c466c02f4854 Mon Sep 17 00:00:00 2001 From: bynt Date: Mon, 16 Jan 2023 14:05:09 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E7=94=A8=E6=88=B7=E4=BF=A1?= =?UTF-8?q?=E6=81=AF=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ResourceServerAutoConfiguration.java | 17 ++++++- .../baiye/service/UserDetailsServiceImpl.java | 4 +- .../system/controller/UserController.java | 46 ++++++++++++++----- .../com/baiye/model/dto/UserByNameDTO.java | 2 - 4 files changed, 51 insertions(+), 18 deletions(-) diff --git a/ad-platform-common/ad-platform-common-security/src/main/java/com/baiye/config/ResourceServerAutoConfiguration.java b/ad-platform-common/ad-platform-common-security/src/main/java/com/baiye/config/ResourceServerAutoConfiguration.java index 260df4a0..4e1849e9 100644 --- a/ad-platform-common/ad-platform-common-security/src/main/java/com/baiye/config/ResourceServerAutoConfiguration.java +++ b/ad-platform-common/ad-platform-common-security/src/main/java/com/baiye/config/ResourceServerAutoConfiguration.java @@ -6,9 +6,11 @@ import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.ComponentScan; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; +import org.springframework.security.web.firewall.HttpFirewall; +import org.springframework.security.web.firewall.StrictHttpFirewall; /** - * + * * @description 资源服务自动配置 * @author Enzo * @create 2022-05-16 @@ -23,4 +25,17 @@ public class ResourceServerAutoConfiguration { return new BCryptPasswordEncoder(); } + + /** + * 配置地址栏不能识别 // 的情况 + * @return + */ + @Bean + public HttpFirewall allowUrlEncodedSlashHttpFirewall() { + StrictHttpFirewall firewall = new StrictHttpFirewall(); + //此处可添加别的规则,目前只设置 允许双 // + firewall.setAllowUrlEncodedDoubleSlash(true); + return firewall; + } + } diff --git a/ad-platform-common/ad-platform-common-security/src/main/java/com/baiye/service/UserDetailsServiceImpl.java b/ad-platform-common/ad-platform-common-security/src/main/java/com/baiye/service/UserDetailsServiceImpl.java index 1419b847..f0418fc5 100644 --- a/ad-platform-common/ad-platform-common-security/src/main/java/com/baiye/service/UserDetailsServiceImpl.java +++ b/ad-platform-common/ad-platform-common-security/src/main/java/com/baiye/service/UserDetailsServiceImpl.java @@ -105,9 +105,7 @@ public class UserDetailsServiceImpl implements UserDetailsService { Set dbAuthsSet = new HashSet<>(); if (CollUtil.isNotEmpty(user.getRoles())) { - user.getRoles().forEach(role -> { - dbAuthsSet.add(SecurityConstants.ROLE + role); - }); + user.getRoles().forEach(role -> dbAuthsSet.add(SecurityConstants.ROLE + role)); // TODO: 2020/8/12 远程查询部门数据权限 //...... } diff --git a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/system/controller/UserController.java b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/system/controller/UserController.java index b23f74a3..1539b7fe 100644 --- a/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/system/controller/UserController.java +++ b/ad-platform-manage/ad-platform-management/src/main/java/com/baiye/modules/system/controller/UserController.java @@ -15,17 +15,17 @@ */ package com.baiye.modules.system.controller; +import cn.hutool.core.collection.CollUtil; +import cn.hutool.core.util.ObjectUtil; import cn.hutool.json.JSONUtil; import com.baiye.component.LoginUser; import com.baiye.config.properties.RsaProperties; import com.baiye.constant.AdPlatFormConstants; import com.baiye.constant.DefaultNumberConstants; import com.baiye.constant.RoleNumberConstants; +import com.baiye.constant.SecurityConstants; import com.baiye.exception.BadRequestException; -import com.baiye.model.dto.DelUserDTO; -import com.baiye.model.dto.RoleSmallDto; -import com.baiye.model.dto.UserDto; -import com.baiye.model.dto.UserFavorOfExcel; +import com.baiye.model.dto.*; import com.baiye.modules.platform.domain.vo.UserPassVo; import com.baiye.modules.platform.service.dto.BuyComboDTO; import com.baiye.modules.platform.service.dto.CreateUserDTO; @@ -38,6 +38,8 @@ import com.baiye.util.ReadExcelUtils; import com.baiye.util.RsaUtils; import com.baiye.util.SecurityUtils; import com.google.common.collect.ImmutableMap; +import com.google.common.collect.Maps; +import io.micrometer.core.instrument.util.StringUtils; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import lombok.RequiredArgsConstructor; @@ -46,6 +48,8 @@ import org.springframework.data.domain.Pageable; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.security.access.prepost.PreAuthorize; +import org.springframework.security.core.GrantedAuthority; +import org.springframework.security.core.authority.AuthorityUtils; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; import org.springframework.security.crypto.password.PasswordEncoder; import org.springframework.validation.annotation.Validated; @@ -54,10 +58,7 @@ import org.springframework.web.multipart.MultipartFile; import javax.servlet.http.HttpServletResponse; import java.io.IOException; -import java.util.Collections; -import java.util.List; -import java.util.Map; -import java.util.Set; +import java.util.*; import java.util.stream.Collectors; /** @@ -82,11 +83,32 @@ public class UserController { @ApiOperation("获取用户信息") @GetMapping(value = "/info") public ResponseEntity getUserInfo() { + LoginUser user; + Set dbAuthsSet = new HashSet<>(); LoginUser currentUser = SecurityUtils.getCurrentUser(); - String jwtTokenString = EncryptUtil.AESEncode(currentUser.getUser().getId().toString(), AdPlatFormConstants.PLATFORM_USER); - // 返回 token 与 用户信息 - Map authInfo = ImmutableMap.of("user", currentUser, "jwtToken", jwtTokenString); - return ResponseEntity.ok(authInfo); + if (ObjectUtil.isNotNull(currentUser)) { + UserDto byName = this.userService.findByName(currentUser.getUsername()); + Set stringSet = roleService.getUserPermissions(byName); + if (CollUtil.isNotEmpty(byName.getRoles())) { + byName.getRoles().forEach + (role -> dbAuthsSet.add(SecurityConstants.ROLE + role)); + } + if (Boolean.TRUE.equals(byName.getIsAdmin())) { + dbAuthsSet.add(SecurityConstants.ADMIN); + } + String[] authArray = dbAuthsSet.stream().filter(StringUtils::isNotBlank).toArray(String[]::new); + List authorityList = null; + if (CollUtil.isNotEmpty(dbAuthsSet)) { + authorityList = AuthorityUtils.createAuthorityList(authArray); + } + user = new LoginUser(byName, stringSet, byName.getId(), byName.getUsername(), byName.getPassword(), byName.getEnabled(), + true, true, true, authorityList, new ArrayList<>()); + String jwtTokenString = EncryptUtil.AESEncode(currentUser.getUser().getId().toString(), AdPlatFormConstants.PLATFORM_USER); + // 返回 token 与 用户信息 + Map authInfo = ImmutableMap.of("user", user, "jwtToken", jwtTokenString); + return ResponseEntity.ok(authInfo); + } + return ResponseEntity.ok(Maps.newConcurrentMap()); } diff --git a/ad-platform-pojo/src/main/java/com/baiye/model/dto/UserByNameDTO.java b/ad-platform-pojo/src/main/java/com/baiye/model/dto/UserByNameDTO.java index 58436554..638d676b 100644 --- a/ad-platform-pojo/src/main/java/com/baiye/model/dto/UserByNameDTO.java +++ b/ad-platform-pojo/src/main/java/com/baiye/model/dto/UserByNameDTO.java @@ -1,10 +1,8 @@ package com.baiye.model.dto; import lombok.Data; -import org.springframework.security.core.GrantedAuthority; import java.io.Serializable; -import java.util.List; import java.util.Set; /**