liurunyu
2024-08-09 6b2f3024479140bb99a94128062c9ae541e99234
用户token过滤,增加不过滤的URl
2个文件已修改
1个文件已添加
89 ■■■■ 已修改文件
pms-parent/pms-common/src/main/java/com/dy/common/webFilter/UserTokenFilter.java 54 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-common/src/main/java/com/dy/common/webFilter/UserTokenNoFilter.java 27 ●●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-global/src/main/resources/application-global.yml 8 ●●●● 补丁 | 查看 | 原始文档 | blame | 历史
pms-parent/pms-common/src/main/java/com/dy/common/webFilter/UserTokenFilter.java
@@ -25,34 +25,42 @@
    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        String token = request.getHeader(Constant.UserTokenKeyInHeader);
        if(!StringUtils.isNullOrEmpty(token)){
            UserTokenContext.set(token);
        HttpServletRequest httpRequest = (HttpServletRequest) servletRequest;
        String requestURI = httpRequest.getRequestURI();
        // 检查请求是否为非过滤项
        if (UserTokenNoFilter.urls != null && UserTokenNoFilter.urls.stream().anyMatch(url -> requestURI.startsWith(url))) {
            // 如果是非过滤项,直接调用下一个过滤器或servlet
            filterChain.doFilter(servletRequest, servletResponse);
        }else{
            PrintWriter pw = null ;
            try {
                BaseResponse<?> res = BaseResponseUtils.buildToLogin() ;
                String jsonString = JSON.toJSONString(res);
                response.setCharacterEncoding("UTF-8");
                response.setContentType("application/json; charset=utf-8");
                pw = response.getWriter() ;
                pw.write(jsonString);
                pw.flush();
            } catch (IOException e) {
                e.printStackTrace();
            }finally {
                if(pw != null){
                    pw.close();
        } else {
            // 如果不是非过滤项,执行过滤逻辑
            HttpServletRequest request = (HttpServletRequest) servletRequest;
            HttpServletResponse response = (HttpServletResponse) servletResponse;
            String token = request.getHeader(Constant.UserTokenKeyInHeader);
            if(!StringUtils.isNullOrEmpty(token)){
                UserTokenContext.set(token);
                filterChain.doFilter(servletRequest, servletResponse);
            }else{
                PrintWriter pw = null ;
                try {
                    BaseResponse<?> res = BaseResponseUtils.buildToLogin() ;
                    String jsonString = JSON.toJSONString(res);
                    response.setCharacterEncoding("UTF-8");
                    response.setContentType("application/json; charset=utf-8");
                    pw = response.getWriter() ;
                    pw.write(jsonString);
                    pw.flush();
                } catch (IOException e) {
                    e.printStackTrace();
                }finally {
                    if(pw != null){
                        pw.close();
                    }
                }
                //request.setAttribute(Constant.ErrorKeyInRequest, "未得到用户token");
                //response.sendRedirect("/error");
            }
            //request.setAttribute(Constant.ErrorKeyInRequest, "未得到用户token");
            //response.sendRedirect("/error");
        }
    }
    @Override
    public void destroy() {
    }
pms-parent/pms-common/src/main/java/com/dy/common/webFilter/UserTokenNoFilter.java
New file
@@ -0,0 +1,27 @@
package com.dy.common.webFilter;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.Configuration;
import java.util.List;
/**
 * @Author: liurunyu
 * @Date: 2024/7/1 14:01
 * @Description
 */
@Configuration
@ConfigurationProperties(prefix = "tokennofilter")
public class UserTokenNoFilter {
    public static List<String> urls ;
    public List<String> getUrls(){
        return urls ;
    }
    public void setUrls(List<String> urls){
        UserTokenNoFilter.urls = urls ;
    }
}
pms-parent/pms-global/src/main/resources/application-global.yml
@@ -43,16 +43,20 @@
        cache-enabled: true  #打开全局缓存开关(二级环境),默认值是true
        #default-enum-type-handler: com.dy.common.mybatis.envm.EnumCodeTypeHandler
#不进行userToken过滤的URL,@ConfigurationProperties要求tokennofilter中所有字母都小写
tokennofilter:
    urls:
        - /sso/sso
pms:
    global:
        dev: true   #是否开发阶段,true或false,开发阶段不进行登录验证及权限验证
        ssoUserExpireAfterAccess: 60  #sso登录后,用户在一定时间(ssoUserExpireAfterAccess)(分钟)内未访问系统,系统清除缓存信息,使用重新登录系统
        ssoUserExpireAfterAccess: 60  #sso登录后,用户在一定时间(ssoUserExpireAfterAccess)(分钟)内未访问系统,系统清除缓存信息,使其重新登录系统
        ssoCacheSizeInit: 10  #sso缓存初始容量
        ssoCacheSizeMax: 10000  #sso缓存最大容量,即支持ssoCacheSizeMax个用户同时登录
    nginx:
        webPort: 8000
    sso:
#        checkUrl: http://127.0.0.1:12344/sso/sso/ssoCheck
        checkUrl: http://127.0.0.1:12344/sso/sso/ssoPowerCheck
        curUserUrl: http://127.0.0.1:12344/sso/sso/ssoCurUser
        webPort: 12344