`
zzc1684
  • 浏览: 1223076 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

SpringMVC 过滤参数的非法字符

阅读更多
package com.oozero.nmshop.system.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import org.springframework.web.filter.OncePerRequestFilter;

import com.oozero.nmshop.system.pojo.Employee;
import com.oozero.nmshop.system.util.JNConstant;


public class LoginSessionFilter extends OncePerRequestFilter {

    private static final String[] ignores = new String[] { "/login.jsp", "resources", "base/user/login", "menu/init",
            "/system/loginStatistics/addString", "mutilUpload" };

    @Override
    protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain chain)
            throws ServletException, IOException {

        request = new Request((HttpServletRequest) request);

        response.setHeader("Set-Cookie", "name=value; HttpOnly");

        String referer = request.getHeader("Referer"); // REFRESH
        if (referer != null && referer.indexOf(request.getContextPath()) < 0) {

            HttpServletResponse servletResponse = (HttpServletResponse) response;
            HttpServletRequest servletRequest = (HttpServletRequest) request;

            servletResponse.sendRedirect(servletRequest.getContextPath() + "/error.jsp");

        } else {

            // 获得在下面代码中要用的request,response,session对象
            HttpServletRequest servletRequest = (HttpServletRequest) request;
            HttpServletResponse servletResponse = (HttpServletResponse) response;
            HttpSession session = servletRequest.getSession();

            Employee employee = (Employee) session.getAttribute(JNConstant.LOGIN_SESSION);

            String path = servletRequest.getRequestURI();

            if (employee != null) {
                chain.doFilter(servletRequest, servletResponse);
                return;
            }

            // 登陆页面无需过滤
            for (String s : ignores) {
                if (path.indexOf(s) > -1) {
                    chain.doFilter(servletRequest, servletResponse);
                    return;
                }
            }
            // 判断如果没有取到员工信息,就跳转到登陆页面

            if (employee == null && (path.indexOf("admin") > -1 || path.indexOf("system") > -1)) {
                
                String queryString="";
                if(request.getQueryString()!=null){
                    queryString="?"+request.getQueryString();
                }
                
                // 跳转到登陆页面
                servletResponse.sendRedirect(servletRequest.getContextPath() + "/login.jsp?url=http://"
                        + servletRequest.getHeader("host") + path + queryString);
            } else {
                // 已经登陆,继续此次请求
                chain.doFilter(request, response);
            }

        }

    }

    public String filterDangerString(String value) {
        if (value == null) {
            return null;
        }
        value = value.replaceAll("\\|", "");

        value = value.replaceAll("&", "&");

        value = value.replaceAll(";", "");

        value = value.replaceAll("@", "");

        value = value.replaceAll("'", "");

        value = value.replaceAll(""", "");

        value = value.replaceAll("\\'", "");

        value = value.replaceAll("\\"", "");

        value = value.replaceAll("<", "<");

        value = value.replaceAll(">", ">");

        value = value.replaceAll("\\(", "");

        value = value.replaceAll("\\)", "");

        value = value.replaceAll("\\+", "");

        value = value.replaceAll("\r", "");

        value = value.replaceAll("\n", "");

        value = value.replaceAll("script", "");

        value = value.replaceAll("'", "");
        value = value.replaceAll(""", "");
        value = value.replaceAll(">", "");
        value = value.replaceAll("<", "");
        value = value.replaceAll("=", "");
        value = value.replaceAll("/", "");
        return value;
    }

    class Request extends HttpServletRequestWrapper {
        public Request(HttpServletRequest request) {
            super(request);
        }

        @Override
        public String getParameter(String name) {
            // 返回值之前 先进行过滤
            return filterDangerString(super.getParameter(name));
        }

        @Override
        public String[] getParameterValues(String name) {
            // 返回值之前 先进行过滤
            String[] values = super.getParameterValues(name);
            for (int i = 0; i < values.length; i++) {
                values[i] = filterDangerString(values[i]);
            }
            return values;
        }
    }

}

 

分享到:
评论

相关推荐

    springmvc入门参数绑定ssm整合

    SpringMVC参数绑定是指将用户请求的参数绑定到控制器的方法参数中。例如,使用@PathVariable注解绑定URL中的参数,使用@RequestParam注解绑定请求参数。 五、SSM整合 SSM整合是指将SpringMVC、MyBatis和Spring框架...

    Http请求传参SpringMVC接收参数详细解析

    本文将深入解析SpringMVC如何处理GET和POST请求中的参数,以及如何使用@RequestParam和@RequestBody注解。 1. GET请求 GET请求通常用于获取资源,其参数直接附加在URL路径后面,以键值对的形式存在。例如,`/api/...

    spring mvc拦截器过滤json中的null值

    // 将过滤后的JSON字符串重新写入请求体 request.setContent(content.toString().getBytes()); // 设置请求体已读,避免重复读取 request.setAttribute("org.springframework.web.multipart.support....

    SpringMVC自定义参数绑定实现详解

    参数绑定过程主要介绍了SpringMVC参数绑定的机理和使用@RequestParam注解指定request请求的参数名绑定到哪个方法形参上。自定义参数绑定部分主要介绍了使用WebDataBinder和使用WebBindingInitializer两种方式实现...

    SpringMVC请求参数处理-2021-04-09.txt

    SpringMVC的参数请,整理了常见的参数处理方法

    SpringMVC参数收集及乱码处理.docx

    SpringMVC 参数收集及乱码处理 SpringMVC 框架提供了多种参数收集方式,以满足不同的应用场景需求。 ParametersCollector 是 SpringMVC 中负责收集参数的组件,它可以从 HttpServletRequest 中获取参数,并将其...

    SpringMVC接收请求参数所有方式总结

    在SpringMVC框架中,处理来自前端的各种请求参数是一项核心任务。本文将全面总结SpringMVC接收请求参数的所有方式,并探讨其背后的工作机制。 1. GET方法请求参数处理: 当使用GET方法发送请求时,参数通常附加在...

    SpringMvc接收参数方法总结(必看篇)

    SpringMvc接收参数方法总结 SpringMvc框架中,接收参数是非常重要的一步骤,对于开发者来说,掌握多种接收参数的方法是非常有必要的。下面将总结SpringMvc框架中七种接收参数的方法。 第一种方法:...

    springmvc数据验证

    数据验证是任何应用程序中不可或缺的部分,它帮助我们防止非法或无效的数据进入系统,从而保护系统免受潜在的攻击。在Spring MVC中,我们可以利用内建的验证支持来轻松实现这一目标。这不仅提高了代码的可读性和可...

    SpringMVC PPT_springmvc_

    SpringMVC 提供了自动的数据绑定功能,可以从请求参数自动填充到 Java 对象,同时也支持基于 Bean Validation 的数据验证。 十、上传下载支持 SpringMVC 提供了对文件上传和下载的支持,可以方便地处理用户的文件...

    SpringMVC 入门小程序

    **SpringMVC 入门小程序详解** SpringMVC是Spring框架的一个重要模块,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。本入门程序旨在帮助初学者理解并掌握SpringMVC的基本概念和工作流程,...

    解决springmvc项目中使用过滤器来解决请求方式为post时出现乱码的问题

    "解决springmvc项目中使用过滤器来解决请求方式为post时出现乱码的问题" Spring MVC 项目中,使用过滤器来解决请求方式为 POST 时出现乱码的问题是非常重要的。本文将详细介绍如何使用过滤器来解决这个问题,并给...

    基于SpringMVC接受JSON参数详解及常见错误总结

    3. **SpringMVC参数绑定**:在SpringMVC中,可以使用多种方式接受JSON参数。一种常见的方法是使用@RequestParam注解,这个注解和Servlet中的request.getParameter方法有相似的功能。通过对控制器方法参数使用@...

    springmvc基础.docx

    springmvc基础 包含代码+知识点+详细解释 1. 什么是springmvc? 2. springmvc框架原理 前端控制器、处理器映射器、处理器适配器、视图解析器 3. springmvc入门程序 目的:对前端控制器、处理器映射器、处理器...

    springMVC练手代码

    9. **数据绑定**:SpringMVC自动将请求参数绑定到控制器方法的参数,也可以自动将模型数据填充到表单中。 10. **异常处理**:通过`@ExceptionHandler`注解,可以在控制器中统一处理异常,或者在配置文件中全局定义...

    springmvc+mybatis通用分页

    在IT行业中,SpringMVC和MyBatis是两个非常重要的框架,它们分别负责Web层的控制和持久层的数据操作。本篇文章将详细讲解如何将它们整合,并实现一个通用的分页功能。 首先,SpringMVC作为Spring框架的一部分,主要...

    Spring MVC请求参数与响应结果全局加密和解密详解

    timestamp是时间戳,data是实际的业务请求数据转化成的Json字符串再进行加密得到的密文,sign是签名,生成规则算法伪代码是SHA-256(data=xxx&timestamp=11111)。为了简单起见,我们可以采用AES对称秘钥为"throwable...

    利用SpringMVC过滤器解决vue跨域请求的问题

    之前写过通过注释的方法解决跨域请求的方法,需要每次都在controll类使用注解,这次通过springmvc的拦截器解决: 继承SpringMVC的类HandlerInterceptor重写preHandle方法,这个方法会在到达 controll之前调用,如下 ...

    SpringMVC完整使用教程

    对于复杂的数据结构,可以使用 POJO 类绑定请求参数值,SpringMVC 会自动将请求参数填充到对象中。此外,也可以直接使用 Servlet API,如 `HttpServletRequest` 作为方法参数,获取原始请求信息。 ### 第 4 章 处理...

Global site tag (gtag.js) - Google Analytics