diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/annotation/Inner.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/annotation/Inner.java index 82d7e4966..1ac962247 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/annotation/Inner.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/annotation/Inner.java @@ -21,11 +21,11 @@ import java.lang.annotation.*; /** * @author lengleng - * @date 2018/11/26 + * @date 2019/4/13 *

- * 服务调用不鉴权注解 + * 服务调用鉴权注解 */ -@Target(ElementType.METHOD) +@Target({ElementType.METHOD, ElementType.TYPE}) @Retention(RetentionPolicy.RUNTIME) @Documented public @interface Inner { diff --git a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PermitAllUrlProperties.java b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PermitAllUrlProperties.java index c45cb0bfb..fd9c2d89c 100644 --- a/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PermitAllUrlProperties.java +++ b/pigx-common/pigx-common-security/src/main/java/com/pig4cloud/pigx/common/security/component/PermitAllUrlProperties.java @@ -17,26 +17,68 @@ package com.pig4cloud.pigx.common.security.component; -import lombok.Data; +import cn.hutool.core.util.ReUtil; +import com.baomidou.mybatisplus.core.toolkit.StringPool; +import com.pig4cloud.pigx.common.security.annotation.Inner; +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.InitializingBean; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.condition.ConditionalOnExpression; import org.springframework.boot.context.properties.ConfigurationProperties; -import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.context.annotation.Configuration; +import org.springframework.core.annotation.AnnotationUtils; +import org.springframework.web.context.WebApplicationContext; +import org.springframework.web.method.HandlerMethod; +import org.springframework.web.servlet.mvc.method.RequestMappingInfo; +import org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping; import java.util.ArrayList; import java.util.List; +import java.util.Map; +import java.util.Optional; +import java.util.regex.Pattern; /** * @author lengleng - * @date 2018/11/10 + * @date 2019/4/13 *

- * 资源服务器对外直接暴露URL + * 资源服务器对外直接暴露URL,如果设置contex-path 要特殊处理 */ -@Data +@Slf4j @Configuration -@RefreshScope @ConditionalOnExpression("!'${security.oauth2.client.ignore-urls}'.isEmpty()") @ConfigurationProperties(prefix = "security.oauth2.client") -public class PermitAllUrlProperties { +public class PermitAllUrlProperties implements InitializingBean { + private static final Pattern PATTERN = Pattern.compile("\\{(.*?)\\}"); + @Autowired + private WebApplicationContext applicationContext; + + @Getter + @Setter private List ignoreUrls = new ArrayList<>(); + + @Override + public void afterPropertiesSet() { + RequestMappingHandlerMapping mapping = applicationContext.getBean(RequestMappingHandlerMapping.class); + Map map = mapping.getHandlerMethods(); + + map.keySet().forEach(info -> { + HandlerMethod handlerMethod = map.get(info); + + // 获取方法上边的注解 替代path variable 为 * + Inner method = AnnotationUtils.findAnnotation(handlerMethod.getMethod(), Inner.class); + Optional.ofNullable(method) + .ifPresent(inner -> info.getPatternsCondition().getPatterns() + .forEach(url -> ignoreUrls.add(ReUtil.replaceAll(url, PATTERN, StringPool.ASTERISK)))); + + // 获取类上边的注解, 替代path variable 为 * + Inner controller = AnnotationUtils.findAnnotation(handlerMethod.getBeanType(), Inner.class); + Optional.ofNullable(controller) + .ifPresent(inner -> info.getPatternsCondition().getPatterns() + .forEach(url -> ignoreUrls.add(ReUtil.replaceAll(url, PATTERN, StringPool.ASTERISK)))); + }); + + } } diff --git a/pigx-config/src/main/resources/config/pigx-activiti-dev.yml b/pigx-config/src/main/resources/config/pigx-activiti-dev.yml index d605fdfec..2d49d15e0 100644 --- a/pigx-config/src/main/resources/config/pigx-activiti-dev.yml +++ b/pigx-config/src/main/resources/config/pigx-activiti-dev.yml @@ -8,10 +8,7 @@ security: ignore-urls: - '/actuator/**' - '/v2/api-docs' - - '/service/**' - '/editor-app/**' - - '/task/view/*' - - '/process/resource/**' - '/modeler.html' - '/ws/**' spring: diff --git a/pigx-config/src/main/resources/config/pigx-daemon-quartz-dev.yml b/pigx-config/src/main/resources/config/pigx-daemon-quartz-dev.yml index 98166eba3..b7cccd59b 100644 --- a/pigx-config/src/main/resources/config/pigx-daemon-quartz-dev.yml +++ b/pigx-config/src/main/resources/config/pigx-daemon-quartz-dev.yml @@ -5,11 +5,6 @@ security: client-id: ENC(tz2NM4GcmnE7sNJTYL8ZSg==) client-secret: ENC(tz2NM4GcmnE7sNJTYL8ZSg==) scope: server - # 默认放行url,子模块重写时application-dev.yml中的公共配置会被覆盖,所以要把公共配置中的放行url再写一次 - ignore-urls: - - /actuator/** - - /v2/api-docs - - /inner-job/** # 数据源配置 spring: diff --git a/pigx-config/src/main/resources/config/pigx-mp-manager-dev.yml b/pigx-config/src/main/resources/config/pigx-mp-manager-dev.yml index 49280daac..faa2c2d43 100644 --- a/pigx-config/src/main/resources/config/pigx-mp-manager-dev.yml +++ b/pigx-config/src/main/resources/config/pigx-mp-manager-dev.yml @@ -5,10 +5,6 @@ security: client-id: ENC(gPFcUOmJm8WqM3k3eSqS0Q==) client-secret: ENC(gPFcUOmJm8WqM3k3eSqS0Q==) scope: server - ignore-urls: - - /actuator/** - - /v2/api-docs - - /*/portal # 数据源配置 spring: diff --git a/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml b/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml index 5c15fd21d..476953e76 100644 --- a/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml +++ b/pigx-config/src/main/resources/config/pigx-upms-biz-dev.yml @@ -5,14 +5,6 @@ security: client-id: ENC(ltJPpR50wT0oIY9kfOe1Iw==) client-secret: ENC(ltJPpR50wT0oIY9kfOe1Iw==) scope: server - # 默认放行url,子模块重写时application-dev.yml中的公共配置会被覆盖,所以要把公共配置中的放行url再写一次 - ignore-urls: - - /actuator/** - - /v2/api-docs - - /user/info/* - - /social/info/* - - /mobile/* - - /log/save # 数据源 spring: diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MobileController.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MobileController.java index 1b376d4e9..e6d6d4e06 100644 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MobileController.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/controller/MobileController.java @@ -19,6 +19,7 @@ package com.pig4cloud.pigx.admin.controller; import com.pig4cloud.pigx.admin.service.MobileService; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.security.annotation.Inner; import io.swagger.annotations.Api; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.GetMapping; @@ -39,6 +40,7 @@ import org.springframework.web.bind.annotation.RestController; public class MobileController { private final MobileService mobileService; + @Inner(value = false) @GetMapping("/{mobile}") public R sendSmsCode(@PathVariable String mobile) { return mobileService.sendSmsCode(mobile); diff --git a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysSocialDetailsServiceImpl.java b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysSocialDetailsServiceImpl.java index 1cde0986e..83737ad70 100755 --- a/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysSocialDetailsServiceImpl.java +++ b/pigx-upms/pigx-upms-biz/src/main/java/com/pig4cloud/pigx/admin/service/impl/SysSocialDetailsServiceImpl.java @@ -17,6 +17,7 @@ package com.pig4cloud.pigx.admin.service.impl; +import com.baomidou.mybatisplus.core.toolkit.StringPool; import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl; import com.pig4cloud.pigx.admin.api.dto.UserInfo; import com.pig4cloud.pigx.admin.api.entity.SysSocialDetails; @@ -80,7 +81,7 @@ public class SysSocialDetailsServiceImpl extends ServiceImpl (String) auth2Authentication.getPrincipal()); return message; - }else{ + } else { return null; } } diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/EditorController.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/EditorController.java index 7ddb4d4e7..c66cb683f 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/EditorController.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/EditorController.java @@ -18,16 +18,18 @@ package com.pig4cloud.pigx.act.controller; import com.pig4cloud.pigx.act.service.EditorService; +import com.pig4cloud.pigx.common.security.annotation.Inner; import lombok.AllArgsConstructor; import org.springframework.web.bind.annotation.*; /** * @author lengleng - * @date 2018/9/25 + * @date 2018/4/13 */ +@Inner(value = false) @RestController -@RequestMapping("/service") @AllArgsConstructor +@RequestMapping("/service") public class EditorController { private final EditorService editorService; diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/ProcessController.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/ProcessController.java index cdea7af27..19ee8c0cc 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/ProcessController.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/ProcessController.java @@ -21,6 +21,7 @@ import cn.hutool.core.io.IoUtil; import com.pig4cloud.pigx.act.service.ProcessService; import com.pig4cloud.pigx.common.core.constant.enums.ResourceTypeEnum; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.security.annotation.Inner; import lombok.AllArgsConstructor; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; @@ -46,6 +47,7 @@ public class ProcessController { return new R<>(processService.getProcessByPage(params)); } + @Inner(value = false) @GetMapping(value = "/resource/{proInsId}/{procDefId}/{resType}") public ResponseEntity resourceRead(@PathVariable String procDefId, @PathVariable String proInsId, @PathVariable String resType) { diff --git a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/TaskController.java b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/TaskController.java index 7aa8a26a5..d512e3670 100644 --- a/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/TaskController.java +++ b/pigx-visual/pigx-activiti/src/main/java/com/pig4cloud/pigx/act/controller/TaskController.java @@ -21,6 +21,7 @@ import cn.hutool.core.io.IoUtil; import com.pig4cloud.pigx.act.dto.LeaveBillDto; import com.pig4cloud.pigx.act.service.ActTaskService; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.security.annotation.Inner; import com.pig4cloud.pigx.common.security.util.SecurityUtils; import lombok.AllArgsConstructor; import org.springframework.http.HttpHeaders; @@ -57,6 +58,7 @@ public class TaskController { return new R(actTaskService.submitTask(leaveBillDto)); } + @Inner(value = false) @GetMapping("/view/{id}") public ResponseEntity viewCurrentImage(@PathVariable String id) { InputStream imageStream = actTaskService.viewByTaskId(id); diff --git a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java index 41f175e25..10c7c0e90 100644 --- a/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java +++ b/pigx-visual/pigx-codegen/src/main/java/com/pig4cloud/pigx/codegen/config/DynamicDataSourceConfig.java @@ -67,7 +67,7 @@ public class DynamicDataSourceConfig implements TransactionManagementConfigurer HikariDataSource ds = new HikariDataSource(); ds.setJdbcUrl(String.valueOf(db.get(DataSourceConstant.DS_JDBC_URL))); ds.setDriverClassName(Driver.class.getName()); - ds.setUsername((String) db.get(DataSourceConstant.DS_NAME)); + ds.setUsername((String) db.get(DataSourceConstant.DS_USER_NAME)); String decPwd = stringEncryptor.decrypt((String) db.get(DataSourceConstant.DS_USER_PWD)); ds.setPassword(decPwd); diff --git a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/AutowireCapableBeanJobFactory.java b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/AutowireCapableBeanJobFactory.java index 64b0e7647..ca5171fe7 100644 --- a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/AutowireCapableBeanJobFactory.java +++ b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/config/AutowireCapableBeanJobFactory.java @@ -37,7 +37,7 @@ class AutowireCapableBeanJobFactory extends SpringBeanJobFactory { protected Object createJobInstance(TriggerFiredBundle bundle) throws Exception { Object jobInstance = super.createJobInstance(bundle); this.beanFactory.autowireBean(jobInstance); - this.beanFactory.initializeBean(jobInstance, (String) null); + this.beanFactory.initializeBean(jobInstance, null); return jobInstance; } } diff --git a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/controller/SysJobController.java b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/controller/SysJobController.java index 96ab8adb6..e0db0a857 100644 --- a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/controller/SysJobController.java +++ b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/controller/SysJobController.java @@ -23,7 +23,6 @@ import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.common.core.constant.CommonConstants; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import com.pig4cloud.pigx.common.log.annotation.SysLog; import com.pig4cloud.pigx.common.security.util.SecurityUtils; import com.pig4cloud.pigx.daemon.quartz.entity.SysJob; @@ -67,7 +66,6 @@ public class SysJobController { @GetMapping("/page") @ApiOperation(value = "分页定时业务查询") public R getSysJobPage(Page page, SysJob sysJob) { - sysJob.setTenantId(TenantContextHolder.getTenantId()); return R.builder().data(sysJobService.page(page, Wrappers.query(sysJob))).build(); } @@ -97,7 +95,6 @@ public class SysJobController { public R save(@RequestBody SysJob sysJob) { sysJob.setJobStatus(JOB_STATUS_RELEASE.getType()); sysJob.setCreateBy(SecurityUtils.getUser().getUsername()); - sysJob.setTenantId(TenantContextHolder.getTenantId()); return R.builder().data(sysJobService.save(sysJob)).build(); } diff --git a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/controller/SysJobLogController.java b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/controller/SysJobLogController.java index ebf12c4c4..fd189174c 100644 --- a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/controller/SysJobLogController.java +++ b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/controller/SysJobLogController.java @@ -20,7 +20,6 @@ package com.pig4cloud.pigx.daemon.quartz.controller; import com.baomidou.mybatisplus.core.toolkit.Wrappers; import com.baomidou.mybatisplus.extension.plugins.pagination.Page; import com.pig4cloud.pigx.common.core.util.R; -import com.pig4cloud.pigx.common.data.tenant.TenantContextHolder; import com.pig4cloud.pigx.daemon.quartz.entity.SysJobLog; import com.pig4cloud.pigx.daemon.quartz.service.SysJobLogService; import io.swagger.annotations.Api; @@ -53,7 +52,6 @@ public class SysJobLogController { @GetMapping("/page") @ApiOperation(value = "分页定时任务日志查询") public R getSysJobLogPage(Page page, SysJobLog sysJobLog) { - sysJobLog.setTenantId(TenantContextHolder.getTenantId()); return R.builder().data(sysJobLogService.page(page, Wrappers.query(sysJobLog))).build(); } } diff --git a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/task/RestTaskDemo.java b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/task/RestTaskDemo.java index c20563c8b..2a43601e1 100644 --- a/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/task/RestTaskDemo.java +++ b/pigx-visual/pigx-daemon-quartz/src/main/java/com/pig4cloud/pigx/daemon/quartz/task/RestTaskDemo.java @@ -1,6 +1,7 @@ package com.pig4cloud.pigx.daemon.quartz.task; import com.pig4cloud.pigx.common.core.util.R; +import com.pig4cloud.pigx.common.security.annotation.Inner; import lombok.extern.slf4j.Slf4j; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; @@ -22,6 +23,7 @@ public class RestTaskDemo { /** * 测试REST风格调用定时任务的演示方法 */ + @Inner(value = false) @GetMapping("/{param}") public R demoMethod(@PathVariable("param") String param) { log.info("测试于:{},传入参数{}", LocalDateTime.now(), param); diff --git a/pigx-visual/pigx-mp-manager/src/main/java/com/pig4cloud/pigx/mp/controller/WxPortalController.java b/pigx-visual/pigx-mp-manager/src/main/java/com/pig4cloud/pigx/mp/controller/WxPortalController.java index 583f530d5..eed66afc8 100755 --- a/pigx-visual/pigx-mp-manager/src/main/java/com/pig4cloud/pigx/mp/controller/WxPortalController.java +++ b/pigx-visual/pigx-mp-manager/src/main/java/com/pig4cloud/pigx/mp/controller/WxPortalController.java @@ -2,6 +2,7 @@ package com.pig4cloud.pigx.mp.controller; import cn.hutool.core.util.StrUtil; import com.pig4cloud.pigx.common.core.constant.SecurityConstants; +import com.pig4cloud.pigx.common.security.annotation.Inner; import com.pig4cloud.pigx.mp.config.WxMpConfiguration; import com.pig4cloud.pigx.mp.config.WxMpContextHolder; import lombok.extern.slf4j.Slf4j; @@ -18,6 +19,7 @@ import org.springframework.web.bind.annotation.*; * 微信接入入口 */ @Slf4j +@Inner(value = false) @RestController @RequestMapping("/{appId}/portal") public class WxPortalController {