From 579d8f247931441c99f8826a88159b91b8206b54 Mon Sep 17 00:00:00 2001 From: GPU is all you need <2778335106@qq.com> Date: Tue, 24 May 2022 09:35:59 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E5=8A=A8=E4=B8=80=E4=BA=9B=E6=96=87?= =?UTF-8?q?=E4=BB=B6=E4=BD=8D=E7=BD=AE,=E5=A2=9E=E5=8A=A0knife4j=E7=9A=84?= =?UTF-8?q?=E4=BE=9D=E8=B5=96,=E5=B9=B6=E9=85=8D=E7=BD=AEknife4j,?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- awardBE/pom.xml | 33 +--- .../edu/ncst/award/config/JacksonConfig.java | 50 ------ .../edu/ncst/award/config/swaggerConfig.java | 43 ----- .../award/controller/LoginController.java | 2 +- .../ncst/award/controller/RoleController.java | 2 +- .../ncst/award/controller/UserController.java | 15 +- .../award/framework/config/JacksonConfig.java | 47 ++++++ .../award/framework/config/SwaggerConfig.java | 158 ++++++++++++++++++ .../config/properties/SwaggerProperties.java | 92 ++++++++++ .../security/CustomAccessDeniedHandler.java | 2 +- .../CustomDelegatingPasswordEncoder.java | 2 +- .../config/security/CustomUserCache.java | 5 +- .../config/security/DataBaseUrlVoter.java | 9 +- .../config/security/SecurityConfig.java | 29 ++-- .../security/filter/AuthCheckFilter.java | 4 +- .../config/security/filter/LoginFilter.java | 4 +- .../token/JwtAuthenticationToken.java | 2 +- .../MobileCaptchaAuthenticationToken.java | 2 +- .../edu/ncst/award/mapper/RoleMapper.java | 2 +- .../edu/ncst/award/model/system/Menu.java | 8 +- .../service/impl/system/UserServiceImpl.java | 4 +- awardBE/src/main/resources/application.yml | 60 ++++++- .../src/main/resources/mapper/RoleMapper.xml | 18 +- 23 files changed, 408 insertions(+), 185 deletions(-) delete mode 100644 awardBE/src/main/java/edu/ncst/award/config/JacksonConfig.java delete mode 100644 awardBE/src/main/java/edu/ncst/award/config/swaggerConfig.java create mode 100644 awardBE/src/main/java/edu/ncst/award/framework/config/JacksonConfig.java create mode 100644 awardBE/src/main/java/edu/ncst/award/framework/config/SwaggerConfig.java create mode 100644 awardBE/src/main/java/edu/ncst/award/framework/config/properties/SwaggerProperties.java rename awardBE/src/main/java/edu/ncst/award/{ => framework}/config/security/CustomAccessDeniedHandler.java (95%) rename awardBE/src/main/java/edu/ncst/award/{ => framework}/config/security/CustomDelegatingPasswordEncoder.java (98%) rename awardBE/src/main/java/edu/ncst/award/{ => framework}/config/security/CustomUserCache.java (96%) rename awardBE/src/main/java/edu/ncst/award/{ => framework}/config/security/DataBaseUrlVoter.java (91%) rename awardBE/src/main/java/edu/ncst/award/{ => framework}/config/security/SecurityConfig.java (93%) rename awardBE/src/main/java/edu/ncst/award/{ => framework}/config/security/filter/AuthCheckFilter.java (97%) rename awardBE/src/main/java/edu/ncst/award/{ => framework}/config/security/filter/LoginFilter.java (98%) rename awardBE/src/main/java/edu/ncst/award/{ => framework}/config/security/token/JwtAuthenticationToken.java (94%) rename awardBE/src/main/java/edu/ncst/award/{ => framework}/config/security/token/MobileCaptchaAuthenticationToken.java (94%) diff --git a/awardBE/pom.xml b/awardBE/pom.xml index 693b55a..c0dc39d 100644 --- a/awardBE/pom.xml +++ b/awardBE/pom.xml @@ -5,7 +5,7 @@ org.springframework.boot spring-boot-starter-parent - 2.6.1 + 2.6.6 edu.ncst @@ -126,32 +126,13 @@ org.springframework.boot spring-boot-starter-security - - - - - - - - - - - - - - - - io.springfox - springfox-boot-starter - 3.0.0 - + + + com.github.xiaoymin + knife4j-spring-boot-starter + 3.0.3 + - - - - - - com.google.guava diff --git a/awardBE/src/main/java/edu/ncst/award/config/JacksonConfig.java b/awardBE/src/main/java/edu/ncst/award/config/JacksonConfig.java deleted file mode 100644 index 7593283..0000000 --- a/awardBE/src/main/java/edu/ncst/award/config/JacksonConfig.java +++ /dev/null @@ -1,50 +0,0 @@ -package edu.ncst.award.config; - -import com.fasterxml.jackson.annotation.JsonInclude; -import com.fasterxml.jackson.databind.SerializationFeature; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; -import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; -import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.core.Ordered; -import org.springframework.core.annotation.Order; -import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; - -import java.time.LocalDate; -import java.time.LocalDateTime; -import java.time.LocalTime; -import java.time.format.DateTimeFormatter; - -@Configuration -public class JacksonConfig { - - @Bean - @Order(Ordered.HIGHEST_PRECEDENCE) - public Jackson2ObjectMapperBuilderCustomizer customJackson() { - return new Jackson2ObjectMapperBuilderCustomizer() { - @Override - public void customize(Jackson2ObjectMapperBuilder builder) { - builder.serializerByType(LocalDateTime.class, - new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - builder.serializerByType(LocalDate.class, - new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); - builder.serializerByType(LocalTime.class, - new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); - builder.deserializerByType(LocalDateTime.class, - new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); - builder.deserializerByType(LocalDate.class, - new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); - builder.deserializerByType(LocalTime.class, - new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); - builder.serializationInclusion(JsonInclude.Include.NON_NULL); - builder.failOnUnknownProperties(false); - builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); - } - }; - } -} diff --git a/awardBE/src/main/java/edu/ncst/award/config/swaggerConfig.java b/awardBE/src/main/java/edu/ncst/award/config/swaggerConfig.java deleted file mode 100644 index a157833..0000000 --- a/awardBE/src/main/java/edu/ncst/award/config/swaggerConfig.java +++ /dev/null @@ -1,43 +0,0 @@ -package edu.ncst.award.config; - -import org.springframework.context.annotation.Bean; -import org.springframework.context.annotation.Configuration; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; -import springfox.documentation.builders.ApiInfoBuilder; -import springfox.documentation.builders.PathSelectors; -import springfox.documentation.builders.RequestHandlerSelectors; -import springfox.documentation.oas.annotations.EnableOpenApi; -import springfox.documentation.service.ApiInfo; -import springfox.documentation.service.Contact; -import springfox.documentation.spi.DocumentationType; -import springfox.documentation.spring.web.plugins.Docket; - -@EnableOpenApi -@Configuration -public class swaggerConfig implements WebMvcConfigurer { - - @Bean - public Docket createRestApi() { - //返回文档摘要信息 - return new Docket(DocumentationType.OAS_30) - .apiInfo(apiInfo()) - .select() - //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) - //配合@EnableOpenApi 找到API位置,不需要再在启动类上配置 - .apis(RequestHandlerSelectors.basePackage("edu.ncst.award.controller")) - .paths(PathSelectors.any()) - .build(); - - } - - //生成接口信息,包括标题、联系人等 - private ApiInfo apiInfo() { - return new ApiInfoBuilder() - .title("Swagger3接口文档") - .description("Rabbit用Swagger3.0。") - .contact(new Contact("Rabbit", "https://swagger.io/", "362250024@qq.com")) - .version("1.0") - .build(); - } - -} diff --git a/awardBE/src/main/java/edu/ncst/award/controller/LoginController.java b/awardBE/src/main/java/edu/ncst/award/controller/LoginController.java index 42c6748..cefefcd 100644 --- a/awardBE/src/main/java/edu/ncst/award/controller/LoginController.java +++ b/awardBE/src/main/java/edu/ncst/award/controller/LoginController.java @@ -1,7 +1,7 @@ package edu.ncst.award.controller; -import edu.ncst.award.config.security.CustomUserCache; +import edu.ncst.award.framework.config.security.CustomUserCache; import edu.ncst.award.domain.vo.R; import edu.ncst.award.domain.vo.RouterVo; import edu.ncst.award.domain.vo.result.UserInfoVO; diff --git a/awardBE/src/main/java/edu/ncst/award/controller/RoleController.java b/awardBE/src/main/java/edu/ncst/award/controller/RoleController.java index 709b8bb..fa88cb7 100644 --- a/awardBE/src/main/java/edu/ncst/award/controller/RoleController.java +++ b/awardBE/src/main/java/edu/ncst/award/controller/RoleController.java @@ -6,7 +6,7 @@ import edu.ncst.award.common.annotation.enums.BusinessType; import edu.ncst.award.common.constant.UserConstants; import edu.ncst.award.common.core.controller.BaseController; import edu.ncst.award.common.core.page.TableDataInfo; -import edu.ncst.award.config.security.CustomUserCache; +import edu.ncst.award.framework.config.security.CustomUserCache; import edu.ncst.award.domain.UserRole; import edu.ncst.award.domain.vo.R; import edu.ncst.award.domain.vo.param.query.PageQuery; diff --git a/awardBE/src/main/java/edu/ncst/award/controller/UserController.java b/awardBE/src/main/java/edu/ncst/award/controller/UserController.java index 8391d44..120947c 100644 --- a/awardBE/src/main/java/edu/ncst/award/controller/UserController.java +++ b/awardBE/src/main/java/edu/ncst/award/controller/UserController.java @@ -15,7 +15,9 @@ import edu.ncst.award.model.system.User; import edu.ncst.award.service.IRoleService; import edu.ncst.award.service.IUserService; import edu.ncst.award.utils.StringUtils; -import io.swagger.annotations.*; +import io.swagger.annotations.Api; +import io.swagger.annotations.ApiOperation; +import io.swagger.annotations.ApiParam; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.security.crypto.bcrypt.BCrypt; @@ -56,14 +58,13 @@ public class UserController extends BaseController { @ApiOperation("根据用户编号获取详细信息") @GetMapping(value = {"/", "/{id}"}) public R> getInfo(@ApiParam("用户ID") @PathVariable(value = "id", required = false) Long userId) { - // admin 具有超级权限你不能修改他 Map ajax = new HashMap<>(); - List roles = roleService.selectRoleAll(); - ajax.put("roles", UserConstants.ADMIN_ID.equals(userId) ? roles : roles.stream().filter(r -> !r.isAdmin()).collect(Collectors.toList())); if (ObjectUtil.isNotNull(userId)) { - User sysUser = userService.selectUserById(userId); - ajax.put("user", sysUser); - ajax.put("roleIds", sysUser.getRoles().stream().map(Role::getRoleId).collect(Collectors.toList())); + List roles = roleService.selectRolesByUserId(userId); + User user = userService.selectUserById(userId); + ajax.put("roles", roles); + ajax.put("user", user); + ajax.put("roleIds", roles.stream().map(Role::getRoleId).collect(Collectors.toList())); } return R.ok(ajax); } diff --git a/awardBE/src/main/java/edu/ncst/award/framework/config/JacksonConfig.java b/awardBE/src/main/java/edu/ncst/award/framework/config/JacksonConfig.java new file mode 100644 index 0000000..aa59941 --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/JacksonConfig.java @@ -0,0 +1,47 @@ +package edu.ncst.award.framework.config; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalDateTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.deser.LocalTimeDeserializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalDateTimeSerializer; +import com.fasterxml.jackson.datatype.jsr310.ser.LocalTimeSerializer; +import org.springframework.boot.autoconfigure.jackson.Jackson2ObjectMapperBuilderCustomizer; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.core.Ordered; +import org.springframework.core.annotation.Order; +import org.springframework.http.converter.json.Jackson2ObjectMapperBuilder; + +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.format.DateTimeFormatter; + +@Configuration +public class JacksonConfig { + + @Bean + @Order(Ordered.HIGHEST_PRECEDENCE) + public Jackson2ObjectMapperBuilderCustomizer customJackson() { + return builder -> { + builder.serializerByType(LocalDateTime.class, + new LocalDateTimeSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + builder.serializerByType(LocalDate.class, + new LocalDateSerializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + builder.serializerByType(LocalTime.class, + new LocalTimeSerializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); + builder.deserializerByType(LocalDateTime.class, + new LocalDateTimeDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss"))); + builder.deserializerByType(LocalDate.class, + new LocalDateDeserializer(DateTimeFormatter.ofPattern("yyyy-MM-dd"))); + builder.deserializerByType(LocalTime.class, + new LocalTimeDeserializer(DateTimeFormatter.ofPattern("HH:mm:ss"))); + builder.serializationInclusion(JsonInclude.Include.NON_NULL); + builder.failOnUnknownProperties(false); + builder.featuresToDisable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); + }; + } +} diff --git a/awardBE/src/main/java/edu/ncst/award/framework/config/SwaggerConfig.java b/awardBE/src/main/java/edu/ncst/award/framework/config/SwaggerConfig.java new file mode 100644 index 0000000..55cad7d --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/SwaggerConfig.java @@ -0,0 +1,158 @@ +package edu.ncst.award.framework.config; + +import com.github.xiaoymin.knife4j.spring.annotations.EnableKnife4j; +import com.github.xiaoymin.knife4j.spring.extension.OpenApiExtensionResolver; +import edu.ncst.award.common.util.spring.SpringUtils; +import edu.ncst.award.framework.config.properties.SwaggerProperties; +import io.swagger.models.auth.In; +import lombok.RequiredArgsConstructor; +import org.apache.commons.lang3.StringUtils; +import org.springframework.beans.BeansException; +import org.springframework.beans.factory.config.BeanPostProcessor; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; +import org.springframework.util.ReflectionUtils; +import org.springframework.web.servlet.mvc.method.RequestMappingInfoHandlerMapping; +import springfox.documentation.builders.ApiInfoBuilder; +import springfox.documentation.builders.PathSelectors; +import springfox.documentation.builders.RequestHandlerSelectors; +import springfox.documentation.service.*; +import springfox.documentation.spi.DocumentationType; +import springfox.documentation.spi.service.contexts.SecurityContext; +import springfox.documentation.spring.web.plugins.Docket; +import springfox.documentation.spring.web.plugins.WebFluxRequestHandlerProvider; +import springfox.documentation.spring.web.plugins.WebMvcRequestHandlerProvider; + +import javax.annotation.PostConstruct; +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.List; + +/** + * Swagger 文档配置 + * + * @author Lion Li + */ +@RequiredArgsConstructor +@Configuration +//@EnableKnife4j 2.06 之后在yml中配置之后可以不写 +public class SwaggerConfig { + + private final SwaggerProperties swaggerProperties; + private final OpenApiExtensionResolver openApiExtensionResolver; + + /** + * 用于适配springboot 2.6 + */ + @Bean + @SuppressWarnings("all") + public BeanPostProcessor springfoxHandlerProviderBeanPostProcessor() { + return new BeanPostProcessor() { + @Override + public Object postProcessAfterInitialization(Object bean, String beanName) throws BeansException { + if (bean instanceof WebMvcRequestHandlerProvider || bean instanceof WebFluxRequestHandlerProvider) { + customizeSpringfoxHandlerMappings(getHandlerMappings(bean)); + } + return bean; + } + + private void customizeSpringfoxHandlerMappings(List mappings) { + mappings.removeIf(mapping -> mapping.getPatternParser() != null); + } + + private List getHandlerMappings(Object bean) { + try { + Field field = ReflectionUtils.findField(bean.getClass(), "handlerMappings"); + field.setAccessible(true); + return (List) field.get(bean); + } catch (IllegalArgumentException | IllegalAccessException e) { + throw new IllegalStateException(e); + } + } + }; + } + + /** + * 创建API + */ + @PostConstruct + public void createRestApi() { + for (SwaggerProperties.Groups group : swaggerProperties.getGroups()) { + String basePackage = group.getBasePackage(); + Docket docket = new Docket(DocumentationType.OAS_30) + .enable(swaggerProperties.getEnabled()) + // 用来创建该API的基本信息,展示在文档的页面中(自定义展示的信息) + .apiInfo(apiInfo()) + // 设置哪些接口暴露给Swagger展示 + .select() + // 扫描所有有注解的api,用这种方式更灵活 + //.apis(RequestHandlerSelectors.withMethodAnnotation(ApiOperation.class)) + // 扫描指定包中的swagger注解 + .apis(RequestHandlerSelectors.basePackage(basePackage)) + // 扫描所有 .apis(RequestHandlerSelectors.any()) + .paths(PathSelectors.any()) + .build() + .groupName(group.getName()) + // 设置安全模式,swagger可以设置访问token + .securitySchemes(securitySchemes()) + .securityContexts(securityContexts()) + .extensions(openApiExtensionResolver.buildExtensions(group.getName())) + .pathMapping(swaggerProperties.getPathMapping()); + String beanName = StringUtils.substringAfterLast(basePackage, ".") + "Docket"; + SpringUtils.registerBean(beanName, docket); + } + } + + /** + * 安全模式,这里指定token通过Authorization头请求头传递 + */ + private List securitySchemes() { + List apiKeyList = new ArrayList<>(); + String header = "Authorization"; // 和AuthCheckFilter对应 + apiKeyList.add(new ApiKey(header, header, In.HEADER.toValue())); + return apiKeyList; + } + + /** + * 安全上下文 + */ + private List securityContexts() { + List securityContexts = new ArrayList<>(); + securityContexts.add( + SecurityContext.builder() + .securityReferences(defaultAuth()) + .operationSelector(o -> o.requestMappingPattern().matches("/.*")) + .build()); + return securityContexts; + } + + /** + * 默认的安全上引用 + */ + private List defaultAuth() { + AuthorizationScope authorizationScope = new AuthorizationScope("global", "accessEverything"); + AuthorizationScope[] authorizationScopes = new AuthorizationScope[1]; + authorizationScopes[0] = authorizationScope; + List securityReferences = new ArrayList<>(); + securityReferences.add(new SecurityReference("Authorization", authorizationScopes)); + return securityReferences; + } + + /** + * 添加摘要信息 + */ + private ApiInfo apiInfo() { + // 用ApiInfoBuilder进行定制 + SwaggerProperties.Contact contact = swaggerProperties.getContact(); + return new ApiInfoBuilder() + // 设置标题 + .title(swaggerProperties.getTitle()) + // 描述 + .description(swaggerProperties.getDescription()) + // 作者信息 + .contact(new Contact(contact.getName(), contact.getUrl(), contact.getEmail())) + // 版本 + .version(swaggerProperties.getVersion()) + .build(); + } +} diff --git a/awardBE/src/main/java/edu/ncst/award/framework/config/properties/SwaggerProperties.java b/awardBE/src/main/java/edu/ncst/award/framework/config/properties/SwaggerProperties.java new file mode 100644 index 0000000..4da730e --- /dev/null +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/properties/SwaggerProperties.java @@ -0,0 +1,92 @@ +package edu.ncst.award.framework.config.properties; + +import lombok.Data; +import lombok.NoArgsConstructor; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.stereotype.Component; + +import java.util.List; + +/** + * swagger 配置属性 + * + * @author Lion Li + */ +@Data +@Component +@ConfigurationProperties(prefix = "swagger") +public class SwaggerProperties { + + /** + * 文档开关 + */ + private Boolean enabled; + + /** + * 设置请求的统一前缀 + */ + private String pathMapping; + + /** + * 标头 + */ + private String title; + + /** + * 描述 + */ + private String description; + + /** + * 项目版本 + */ + private String version; + + /** + * 联系方式 + */ + private Contact contact; + + /** + * 组配置 + */ + private List groups; + + @Data + @NoArgsConstructor + public static class Contact { + + /** + * 联系人 + */ + private String name; + + /** + * 联系人url + */ + private String url; + + /** + * 联系人email + */ + private String email; + + } + + @Data + @NoArgsConstructor + public static class Groups { + + /** + * 组名 + */ + private String name; + + /** + * 基础包路径 + */ + private String basePackage; + + } + +} diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/CustomAccessDeniedHandler.java b/awardBE/src/main/java/edu/ncst/award/framework/config/security/CustomAccessDeniedHandler.java similarity index 95% rename from awardBE/src/main/java/edu/ncst/award/config/security/CustomAccessDeniedHandler.java rename to awardBE/src/main/java/edu/ncst/award/framework/config/security/CustomAccessDeniedHandler.java index 3bf0e1c..62887e4 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/CustomAccessDeniedHandler.java +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/security/CustomAccessDeniedHandler.java @@ -1,4 +1,4 @@ -package edu.ncst.award.config.security; +package edu.ncst.award.framework.config.security; import com.fasterxml.jackson.databind.ObjectMapper; diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/CustomDelegatingPasswordEncoder.java b/awardBE/src/main/java/edu/ncst/award/framework/config/security/CustomDelegatingPasswordEncoder.java similarity index 98% rename from awardBE/src/main/java/edu/ncst/award/config/security/CustomDelegatingPasswordEncoder.java rename to awardBE/src/main/java/edu/ncst/award/framework/config/security/CustomDelegatingPasswordEncoder.java index 37d900a..68dc388 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/CustomDelegatingPasswordEncoder.java +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/security/CustomDelegatingPasswordEncoder.java @@ -1,4 +1,4 @@ -package edu.ncst.award.config.security; +package edu.ncst.award.framework.config.security; import org.springframework.security.crypto.argon2.Argon2PasswordEncoder; import org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder; diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/CustomUserCache.java b/awardBE/src/main/java/edu/ncst/award/framework/config/security/CustomUserCache.java similarity index 96% rename from awardBE/src/main/java/edu/ncst/award/config/security/CustomUserCache.java rename to awardBE/src/main/java/edu/ncst/award/framework/config/security/CustomUserCache.java index e53f637..61cb851 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/CustomUserCache.java +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/security/CustomUserCache.java @@ -1,4 +1,4 @@ -package edu.ncst.award.config.security; +package edu.ncst.award.framework.config.security; import cn.hutool.core.util.ObjectUtil; import cn.hutool.core.util.StrUtil; @@ -6,7 +6,6 @@ import cn.hutool.extra.spring.SpringUtil; import cn.hutool.json.JSONUtil; import edu.ncst.award.model.system.User; import edu.ncst.award.domain.vo.result.UserInfoVO; -import edu.ncst.award.service.IUserService; import edu.ncst.award.service.impl.system.UserServiceImpl; import lombok.extern.slf4j.Slf4j; import org.springframework.data.redis.core.RedisTemplate; @@ -15,8 +14,6 @@ import org.springframework.security.core.userdetails.UserCache; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.stereotype.Component; -import javax.annotation.Resource; - @Slf4j @Component diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/DataBaseUrlVoter.java b/awardBE/src/main/java/edu/ncst/award/framework/config/security/DataBaseUrlVoter.java similarity index 91% rename from awardBE/src/main/java/edu/ncst/award/config/security/DataBaseUrlVoter.java rename to awardBE/src/main/java/edu/ncst/award/framework/config/security/DataBaseUrlVoter.java index 11a62e1..664b4c0 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/DataBaseUrlVoter.java +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/security/DataBaseUrlVoter.java @@ -1,21 +1,14 @@ -package edu.ncst.award.config.security; +package edu.ncst.award.framework.config.security; -import edu.ncst.award.model.system.Resource; -import edu.ncst.award.model.system.Role; import edu.ncst.award.service.IResourceService; -import edu.ncst.award.utils.URLUtils; -import edu.ncst.award.domain.vo.result.UserInfoVO; import org.springframework.security.access.AccessDecisionVoter; import org.springframework.security.access.ConfigAttribute; import org.springframework.security.core.Authentication; import org.springframework.security.core.GrantedAuthority; import org.springframework.security.web.FilterInvocation; import org.springframework.stereotype.Component; -import org.springframework.util.AntPathMatcher; import java.util.Collection; -import java.util.List; -import java.util.stream.Collectors; /** * URL 鉴权投票器 diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/SecurityConfig.java b/awardBE/src/main/java/edu/ncst/award/framework/config/security/SecurityConfig.java similarity index 93% rename from awardBE/src/main/java/edu/ncst/award/config/security/SecurityConfig.java rename to awardBE/src/main/java/edu/ncst/award/framework/config/security/SecurityConfig.java index fa2939e..743b1fe 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/SecurityConfig.java +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/security/SecurityConfig.java @@ -1,8 +1,8 @@ -package edu.ncst.award.config.security; +package edu.ncst.award.framework.config.security; import com.fasterxml.jackson.databind.ObjectMapper; -import edu.ncst.award.config.security.filter.AuthCheckFilter; -import edu.ncst.award.config.security.filter.LoginFilter; +import edu.ncst.award.framework.config.security.filter.AuthCheckFilter; +import edu.ncst.award.framework.config.security.filter.LoginFilter; import edu.ncst.award.domain.vo.R; import edu.ncst.award.exception.CodeMsg; import edu.ncst.award.service.ILoginLogService; @@ -77,18 +77,18 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { "/configuration/ui", "/swagger-resources/**", "/configuration/**", - "/swagger-ui.html", - "/webjars/**", +// "/swagger-ui/index.html", +// "/webjars/**", "/api/captcha.jpg", - "/websocket/**", - "/api/image/get/**", - "/common/download/**", - "/test/**", - "/*.html", - "/**/*.html", - "/**/*.css", - "/**/*.js", - "/error*" +// "/websocket/**", +// "/api/image/get/**", +// "/common/download/**", +// "/test/**", +// "/*.html", +// "/**/*.html", +// "/**/*.css", +// "/**/*.js", +// "/error*" }; @@ -146,6 +146,7 @@ public class SecurityConfig extends WebSecurityConfigurerAdapter { .httpBasic().disable() .authorizeRequests() .accessDecisionManager(accessDecisionManager())//访问决策管理器 + .antMatchers("/swagger-ui/*").permitAll() .antMatchers("/api/login").permitAll() .antMatchers("/system/init").permitAll() // 除上面外的所有请求全部需要鉴权认证 diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/filter/AuthCheckFilter.java b/awardBE/src/main/java/edu/ncst/award/framework/config/security/filter/AuthCheckFilter.java similarity index 97% rename from awardBE/src/main/java/edu/ncst/award/config/security/filter/AuthCheckFilter.java rename to awardBE/src/main/java/edu/ncst/award/framework/config/security/filter/AuthCheckFilter.java index 70ebcca..64189ee 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/filter/AuthCheckFilter.java +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/security/filter/AuthCheckFilter.java @@ -1,7 +1,7 @@ -package edu.ncst.award.config.security.filter; +package edu.ncst.award.framework.config.security.filter; import com.fasterxml.jackson.databind.ObjectMapper; -import edu.ncst.award.config.security.token.JwtAuthenticationToken; +import edu.ncst.award.framework.config.security.token.JwtAuthenticationToken; import edu.ncst.award.exception.CodeMsg; import edu.ncst.award.model.system.Role; import edu.ncst.award.utils.ResponseUtils; diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/filter/LoginFilter.java b/awardBE/src/main/java/edu/ncst/award/framework/config/security/filter/LoginFilter.java similarity index 98% rename from awardBE/src/main/java/edu/ncst/award/config/security/filter/LoginFilter.java rename to awardBE/src/main/java/edu/ncst/award/framework/config/security/filter/LoginFilter.java index b6b0dd2..972f397 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/filter/LoginFilter.java +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/security/filter/LoginFilter.java @@ -1,7 +1,7 @@ -package edu.ncst.award.config.security.filter; +package edu.ncst.award.framework.config.security.filter; import com.fasterxml.jackson.databind.ObjectMapper; -import edu.ncst.award.config.security.token.MobileCaptchaAuthenticationToken; +import edu.ncst.award.framework.config.security.token.MobileCaptchaAuthenticationToken; import edu.ncst.award.exception.BusinessException; import edu.ncst.award.exception.CodeMsg; import edu.ncst.award.model.system.Role; diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/token/JwtAuthenticationToken.java b/awardBE/src/main/java/edu/ncst/award/framework/config/security/token/JwtAuthenticationToken.java similarity index 94% rename from awardBE/src/main/java/edu/ncst/award/config/security/token/JwtAuthenticationToken.java rename to awardBE/src/main/java/edu/ncst/award/framework/config/security/token/JwtAuthenticationToken.java index 845e9cb..535e299 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/token/JwtAuthenticationToken.java +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/security/token/JwtAuthenticationToken.java @@ -1,4 +1,4 @@ -package edu.ncst.award.config.security.token; +package edu.ncst.award.framework.config.security.token; import edu.ncst.award.domain.vo.result.UserInfoVO; import org.springframework.security.authentication.AbstractAuthenticationToken; diff --git a/awardBE/src/main/java/edu/ncst/award/config/security/token/MobileCaptchaAuthenticationToken.java b/awardBE/src/main/java/edu/ncst/award/framework/config/security/token/MobileCaptchaAuthenticationToken.java similarity index 94% rename from awardBE/src/main/java/edu/ncst/award/config/security/token/MobileCaptchaAuthenticationToken.java rename to awardBE/src/main/java/edu/ncst/award/framework/config/security/token/MobileCaptchaAuthenticationToken.java index 455d61c..dd8cf9a 100644 --- a/awardBE/src/main/java/edu/ncst/award/config/security/token/MobileCaptchaAuthenticationToken.java +++ b/awardBE/src/main/java/edu/ncst/award/framework/config/security/token/MobileCaptchaAuthenticationToken.java @@ -1,4 +1,4 @@ -package edu.ncst.award.config.security.token; +package edu.ncst.award.framework.config.security.token; import org.springframework.security.authentication.AbstractAuthenticationToken; import org.springframework.security.core.GrantedAuthority; diff --git a/awardBE/src/main/java/edu/ncst/award/mapper/RoleMapper.java b/awardBE/src/main/java/edu/ncst/award/mapper/RoleMapper.java index 9b293d2..81b11df 100644 --- a/awardBE/src/main/java/edu/ncst/award/mapper/RoleMapper.java +++ b/awardBE/src/main/java/edu/ncst/award/mapper/RoleMapper.java @@ -25,7 +25,7 @@ public interface RoleMapper extends BaseMapperPlus { Page selectPageRoleList(@Param("page") Page page, @Param("role") Role role); - List getUserRolesById(long id); + List getUserRolesById(@Param("userId") long userId); // diff --git a/awardBE/src/main/java/edu/ncst/award/model/system/Menu.java b/awardBE/src/main/java/edu/ncst/award/model/system/Menu.java index cbd22d6..a84c141 100644 --- a/awardBE/src/main/java/edu/ncst/award/model/system/Menu.java +++ b/awardBE/src/main/java/edu/ncst/award/model/system/Menu.java @@ -17,7 +17,7 @@ import java.util.Objects; @ApiModel(value="Menu", description="菜单") @Data @TableName("sys_menu") -public class Menu extends TreeNode implements Serializable { +public class Menu implements Serializable { private static final long serialVersionUID=1L; @@ -55,9 +55,9 @@ public class Menu extends TreeNode implements Serializable { @ApiModelProperty(value = "上级菜单") private Integer parentId; -// @ApiModelProperty(value = "下级菜单") -// @TableField(exist = false) -// private List children; + @ApiModelProperty(value = "下级菜单") + @TableField(exist = false) + private List children; @ApiModelProperty(value = "是否显示在菜单上") private Boolean showInMenu = true; diff --git a/awardBE/src/main/java/edu/ncst/award/service/impl/system/UserServiceImpl.java b/awardBE/src/main/java/edu/ncst/award/service/impl/system/UserServiceImpl.java index df3e25f..df36a80 100644 --- a/awardBE/src/main/java/edu/ncst/award/service/impl/system/UserServiceImpl.java +++ b/awardBE/src/main/java/edu/ncst/award/service/impl/system/UserServiceImpl.java @@ -8,10 +8,9 @@ import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import edu.ncst.award.common.constant.UserConstants; import edu.ncst.award.common.core.exception.ServiceException; import edu.ncst.award.common.core.page.TableDataInfo; -import edu.ncst.award.config.security.CustomUserCache; +import edu.ncst.award.framework.config.security.CustomUserCache; import edu.ncst.award.domain.UserRole; import edu.ncst.award.domain.vo.ListResultVO; -import edu.ncst.award.domain.vo.param.CurrentUserDTO; import edu.ncst.award.domain.vo.param.query.PageQuery; import edu.ncst.award.domain.vo.param.query.UserQuery; import edu.ncst.award.domain.vo.result.UserInfoVO; @@ -21,7 +20,6 @@ import edu.ncst.award.model.system.Role; import edu.ncst.award.model.system.User; import edu.ncst.award.service.IUserService; import lombok.RequiredArgsConstructor; -import org.springframework.security.core.context.SecurityContextHolder; import org.springframework.security.core.userdetails.UserDetails; import org.springframework.security.core.userdetails.UserDetailsService; import org.springframework.security.core.userdetails.UsernameNotFoundException; diff --git a/awardBE/src/main/resources/application.yml b/awardBE/src/main/resources/application.yml index 0f6a7e9..3c6bf17 100644 --- a/awardBE/src/main/resources/application.yml +++ b/awardBE/src/main/resources/application.yml @@ -37,17 +37,61 @@ server: # mapper-locations: classpath:mapping/*.xml # type-aliases-package: edu.ncst.award.model +#swagger: +# enabled: true +# title: API文档 +# description: 科技奖申报系统API文档 +# base-package: edu.ncst.award.controller +# exclude-path: /error/** +# termsOfServiceUrl: https://meander.net.cn +# contact: +# name: sage +# url: www.meander.net.cn +# email: sage@meander.net.cn +# Swagger配置 swagger: + # 是否开启swagger enabled: true - title: API文档 - description: 科技奖申报系统API文档 - base-package: edu.ncst.award.controller - exclude-path: /error/** - termsOfServiceUrl: https://meander.net.cn + # 请求前缀 +# pathMapping: + # 标题 + title: '标题:YLY后台管理系统_接口文档' + # 描述 + description: '描述:用于管理集团旗下公司的人员信息,具体包括XXX,XXX模块...' + # 版本 + version: '版本号: no' + # 作者信息 contact: - name: sage - url: www.meander.net.cn - email: sage@meander.net.cn + name: Gpu is all you need + email: 2778335106@qq.com +# url: https://gitee.com/JavaLionLi/RuoYi-Vue-Plus + groups: +# - name: 1.演示案例 +# basePackage: + - name: 2.系统模块 + basePackage: edu.ncst.award.controller +# - name: 3.代码生成模块 +# basePackage: + +knife4j: + # 是否开启Knife4j增强模式 + enable: true + # 是否开启生产环境保护策略 + production: false + basic: + enable: true + username: ruoyi + password: 123456 + # 前端Ui的个性化配置属性 + setting: + # 默认语言 + language: zh-CN + # 是否显示Footer + enableFooter: false + # 是否开启动态参数调试功能 + enableDynamicParameter: true + # 是否在每个Debug调试栏后显示刷新变量按钮 + enableReloadCacheParameter: true diff --git a/awardBE/src/main/resources/mapper/RoleMapper.xml b/awardBE/src/main/resources/mapper/RoleMapper.xml index 3826e2a..7db3c51 100644 --- a/awardBE/src/main/resources/mapper/RoleMapper.xml +++ b/awardBE/src/main/resources/mapper/RoleMapper.xml @@ -64,13 +64,17 @@ + + + + + + +