【Druid 登陆异常】

Druid 登陆异常

问题描述:页面登陆将请求参数放到请求体中导致无法通过request.getParameter 方式
复制代码
服务加载流程 通过 DruidStatViewServletConfiguration 中方法 statViewServletRegistrationBean 初始化StatViewServlet
通过 com.alibaba.druid.support.jakarta.ResourceServlet中的内部类ResourceHandler 解析tomcat拦截数据

页面请求

请求命中

返回错误数据

页面展示 The username or password you entered is incorrect.

处理方案
处理一:后端处理druid登陆账号密码通过请求体获取
复制代码
后端添加这三个类
  1. LazyResourceServlet 重写tomcat HttpServlet 新增两个方法获取当前请求体数据然后通过请求体中获取账号、密码
java 复制代码
    /**
     * body中的数据类型 loginUsername=druid&loginPassword=druid
     *
     * @return body 中的参数属性
     */
    public static String getParamsFromBody(String paramsKey) {
        return getRequestParamFromBody().get(paramsKey);
    }

    /**
     * 从body中解析出请求参数
     *
     * @return body中的请求参数
     */
    public static Map<String, String> getRequestParamFromBody() {
        // DynamicLazyHttpBodyContextHolder 在 wu-framework-web 中 1.2.0以后的版本都支持当前上下文获取请求中的body
        
        byte[] requestBodyBytes = DynamicLazyHttpBodyContextHolder.peek();
        // loginUsername=druid&loginPassword=druid
        String requestBody = new String(requestBodyBytes);
        Map<String, String> paramMap = new HashMap<>();

        for (String paramKeyValue : requestBody.split("&")) {
            String[] keyValue = paramKeyValue.split("=");
            if (keyValue.length != 2) {
                continue;
            }
            paramMap.put(keyValue[0], keyValue[1]);
        }
        return paramMap;
    }
复制代码
原先代码中通过 request.getParameter(PARAM_NAME_USERNAME) 替换成getParamsFromBody(PARAM_NAME_USERNAME);
  1. LazyStatViewServlet 重写实现 LazyResourceServlet

    通过构造器初始化LazyResourceServlet

  2. DruidStatViewServletLoginByBodyConfiguration 初始化 LazyStatViewServlet

登陆效果

处理二:前端处理将数据放到请求参数处理(暂时不做演示)

Lazy ORM框架地址

当前项目案例地址

相关推荐
想要成为糕糕手几秒前
238. 除了自身以外数组的乘积 — 面试向深度解析
javascript·算法·面试
玖玥拾2 分钟前
C# 语言进阶(十三)网络 DLL 库分层设计
服务器·开发语言·网络·网络协议·c#
kisshyshy2 分钟前
前端存储、表单异步提交与 this 指向完全指南
前端·javascript·html
Kel7 分钟前
管道、IPC、Socket:你以为的三种技术,其实是同一件事
javascript·设计模式·node.js
2601_949816357 分钟前
C++内存对齐与结构体填充深度精讲:底层规则、内存裁剪、适配优化与工程避坑
开发语言·arm开发·c++
心中有国也有家9 分钟前
AtomGit Flutter 鸿蒙客户端: AnimatedScale 与 AnimatedContainer 联合实战
android·javascript·flutter·华为·harmonyos
卓怡学长11 分钟前
w261springboot基于web学校课程管理系统
java·数据库·spring boot·spring·intellij-idea
shuoshuohaohao12 分钟前
《JavaWeb --2》
java
浩瀚地学12 分钟前
【面试算法笔记】0105-数组-螺旋矩阵
java·开发语言·笔记·算法·面试
嘉泰姆半导体官方13 分钟前
CXAR41337C 双通道数字音频功放 | 2×20W | EQ+DRC | I²S | MCLK-Less - 嘉泰姆电子
前端·javascript·数据库