liurunyu
2024-04-15 2b34d59bb1e9b37cdecefdb9c39a27fd839a446b
1、完善框架代码
5个文件已修改
130 ■■■■■ 已修改文件
pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/global/SysSetCtrl.java 6 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-global/src/main/resources/application-global.yml 5 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/user/UserCtrl.java 65 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java 39 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-web-sso/src/main/java/com/dy/sso/config/CaffeineCacheConfiguration.java 15 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-global/src/main/java/com/dy/pmsGlobal/global/SysSetCtrl.java
@@ -1,9 +1,9 @@
package com.dy.pmsGlobal.global;
import com.dy.common.aop.SsoPowerAop;
import com.dy.common.webUtil.BaseResponse;
import com.dy.common.webUtil.BaseResponseUtils;
import com.dy.pmsGlobal.pojoBa.BaSysSet;
import com.dy.pmsGlobal.pojoBa.BaUser;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
@@ -28,10 +28,10 @@
     * @return 唯一系统设置
     */
    //@GetMapping(path = "one", consumes = MediaType.TEXT_PLAIN_VALUE)//指前端向后传的参数类型
    @GetMapping(path = "one")
    @GetMapping(path = "single")
    //@SsoAop() //只有登录验证,没有权限验证
    @SsoPowerAop(power = "-1") //登录与权限同时验证
    public BaseResponse<BaUser> single() {
    public BaseResponse<BaSysSet> single() {
        try {
            return BaseResponseUtils.buildSuccess(this.sv.selectSingle());
        } catch (Exception e) {
pms-parent/pms-global/src/main/resources/application-global.yml
@@ -35,10 +35,13 @@
        aggressiveLazyLoading: false # 将积极加载改为消极加载(即按需加载),默认值是false
        lazy-load-trigger-methods: ""  # 阻挡不相干的操作触发,实现懒加载
        cache-enabled: true  #打开全局缓存开关(二级环境),默认值是true
        default-enum-type-handler: com.dy.common.mybatis.envm.EnumCodeTypeHandler
        #default-enum-type-handler: com.dy.common.mybatis.envm.EnumCodeTypeHandler
pms:
    global:
        dev: true   #是否开发阶段,true或false,开发阶段不进行登录验证及权限验证
        ssoUserExpireAfterAccess: 60  #sso登录后,用户在一定时间(ssoUserExpireAfterAccess)(分钟)内未访问系统,系统清除缓存信息,使用重新登录系统
        ssoCacheSizeInit: 10  #sso缓存初始容量
        ssoCacheSizeMax: 10000  #sso缓存最大容量,即支持ssoCacheSizeMax个用户同时登录
    sso:
        checkUrl: http://127.0.0.1:12344/sso/sso/ssoCheck
        webPort: 12344
pms-parent/pms-web-base/src/main/java/com/dy/pmsBase/user/UserCtrl.java
@@ -137,14 +137,14 @@
    //@SsoAop() //只有登录验证,没有权限验证
    @SsoPowerAop(power = "10100011") //登录与权限同时验证
    public BaseResponse<Boolean> update(@RequestBody @Validated BaUser po, BindingResult bindingResult) {
        if (bindingResult != null && bindingResult.hasErrors()) {
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        if (po.id == null) {
            return BaseResponseUtils.buildFail("无数据实体ID");
        }
        int count;
        try {
            if (bindingResult != null && bindingResult.hasErrors()) {
                return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            }
            if (po.id == null) {
                return BaseResponseUtils.buildFail("无数据实体ID");
            }
            po.password = null;//设置为null,不做更新
            po.supperAdmin = null;//设置为null,不做更新
            po.deleted = null;//设置为null,不做更新
@@ -168,27 +168,28 @@
    //@GetMapping(path = "changePassword", consumes = MediaType.TEXT_PLAIN_VALUE)
    @GetMapping(path = "changePassword")
    @SsoAop()
    public BaseResponse<Boolean> changePassword(String id, String oldPassword, String newPassword) throws Exception {
        if (id == null) {
            return BaseResponseUtils.buildFail("id不能为空");
        }
        if (StringUtils.isNullOrEmpty(oldPassword)) {
            return BaseResponseUtils.buildFail("旧密码不能为空");
        }
        if (StringUtils.isNullOrEmpty(newPassword)) {
            return BaseResponseUtils.buildFail("新密码不能为空");
        }
        /*
        如果前端进行了base64加密
        oldPassword = new String(Base64.getDecoder().decode(oldPassword)) ;
        newPassword = new String(Base64.getDecoder().decode(newPassword)) ;
        */
        oldPassword = MD5.encrypt(oldPassword);//进行加密码
        newPassword = MD5.encrypt(newPassword);//进行加密码
        Long idLg = Long.parseLong(id);
    public BaseResponse<Boolean> changePassword(String id, String oldPassword, String newPassword) {
        int count;
        try {
            if (id == null) {
            return BaseResponseUtils.buildFail("id不能为空");
            }
            if (StringUtils.isNullOrEmpty(oldPassword)) {
                return BaseResponseUtils.buildFail("旧密码不能为空");
            }
            if (StringUtils.isNullOrEmpty(newPassword)) {
                return BaseResponseUtils.buildFail("新密码不能为空");
            }
            /*
            如果前端进行了base64加密
            oldPassword = new String(Base64.getDecoder().decode(oldPassword)) ;
            newPassword = new String(Base64.getDecoder().decode(newPassword)) ;
            */
            oldPassword = MD5.encrypt(oldPassword);//进行加密码
            newPassword = MD5.encrypt(newPassword);//进行加密码
            Long idLg = Long.parseLong(id) ;
            BaUser po = this.sv.selectById(idLg);
            if (Objects.isNull(po)) {
                return BaseResponseUtils.buildFail("未得到用户,请求失败");
@@ -219,15 +220,15 @@
    @PostMapping(path = "resetPassword", consumes = MediaType.APPLICATION_JSON_VALUE)
    //@SsoAop() //只有登录验证,没有权限验证
    @SsoPowerAop(power = "10100011") //登录与权限同时验证
    public BaseResponse<Boolean> resetPassword(@RequestBody @Validated ResetPasswordVo vo, BindingResult bindingResult) throws Exception {
        if (bindingResult != null && bindingResult.hasErrors()) {
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        }
        String password = MD5.encrypt(vo.password);//进行加密码
        Long idLg = Long.parseLong(vo.id);
    public BaseResponse<Boolean> resetPassword(@RequestBody @Validated ResetPasswordVo vo, BindingResult bindingResult) {
        int count;
        try {
            BaUser po = this.sv.selectById(idLg);
            if (bindingResult != null && bindingResult.hasErrors()) {
                return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            }
            String password = MD5.encrypt(vo.password);//进行加密码
            Long idLg = Long.parseLong(vo.id);
             BaUser po = this.sv.selectById(idLg);
            if (Objects.isNull(po)) {
                return BaseResponseUtils.buildFail("未得到用户,请求失败");
            } else {
pms-parent/pms-web-sso/src/main/java/com/dy/sso/busi/SsoCtrl.java
@@ -46,10 +46,15 @@
     */
    @PostMapping(path = "login", consumes = MediaType.APPLICATION_JSON_VALUE)//前端提交json数据
    public BaseResponse<UserVo> login(@RequestBody  @Valid LoginVo vo, BindingResult bindingResult) {
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        try {
            if(bindingResult != null && bindingResult.hasErrors()){
                return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            }
            return this.doLogin(vo) ;
        } catch (Exception e) {
            log.error("查询一个用户数据异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
        return this.doLogin(vo) ;
    }
    /**
@@ -59,10 +64,15 @@
     */
    @PostMapping(path = "loginForm", consumes = MediaType.MULTIPART_FORM_DATA_VALUE)//前端提交form表单数据
    public BaseResponse<UserVo> loginForm(@RequestBody @Valid LoginVo vo, BindingResult bindingResult){
        if(bindingResult != null && bindingResult.hasErrors()){
            return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
        try{
            if(bindingResult != null && bindingResult.hasErrors()){
                return BaseResponseUtils.buildFail(Objects.requireNonNull(bindingResult.getFieldError()).getDefaultMessage());
            }
            return this.doLogin(vo) ;
        } catch (Exception e) {
            log.error("查询一个用户数据异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
        return this.doLogin(vo) ;
    }
@@ -73,12 +83,17 @@
     */
    @GetMapping(path = "logout")
    public BaseResponse<Boolean> logout(HttpServletRequest hr){
        String token = hr.getHeader("token") ;
        if(token != null){
            this.sv.logout(token) ;
            return BaseResponseUtils.buildSuccess(true);
        }else{
            return BaseResponseUtils.buildFail("未从header中得到token");
        try{
            String token = hr.getHeader("token") ;
            if(token != null){
                this.sv.logout(token) ;
                return BaseResponseUtils.buildSuccess(true);
            }else{
                return BaseResponseUtils.buildFail("未从header中得到token");
            }
        } catch (Exception e) {
            log.error("查询一个用户数据异常", e);
            return BaseResponseUtils.buildException(e.getMessage());
        }
    }
pms-parent/pms-web-sso/src/main/java/com/dy/sso/config/CaffeineCacheConfiguration.java
@@ -2,6 +2,7 @@
import com.github.benmanes.caffeine.cache.Caffeine;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cache.CacheManager;
import org.springframework.cache.caffeine.CaffeineCacheManager;
import org.springframework.context.annotation.Bean;
@@ -27,13 +28,21 @@
      maximumSize和maximumWeight不可以同时使用
      weakValues和softValues不可以同时使用weakValues和softValues不可以同时使用
     */
    @Value("${pms.global.ssoUserExpireAfterAccess:60}")
    private Integer defaultTrueRandomFalsePassword;
    @Value("${pms.global.ssoCacheSizeInit:10}")
    private Integer ssoCacheSizeInit;
    @Value("${pms.global.ssoCacheSizeMax:10000}")
    private Integer ssoCacheSizeMax;
    @Bean
    public CacheManager cacheManager() {
        CaffeineCacheManager cacheManager = new CaffeineCacheManager();
        cacheManager.setCaffeine(Caffeine.newBuilder()
                .initialCapacity(10)
                .maximumSize(10000)
                .expireAfterAccess(30, TimeUnit.MINUTES));
                .initialCapacity(ssoCacheSizeInit)
                .maximumSize(ssoCacheSizeMax)
                .expireAfterAccess(defaultTrueRandomFalsePassword, TimeUnit.MINUTES));
        return cacheManager;
    }