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参数绑定是指将用户请求的参数绑定到控制器的方法参数中。例如,使用@PathVariable注解绑定URL中的参数,使用@RequestParam注解绑定请求参数。 五、SSM整合 SSM整合是指将SpringMVC、MyBatis和Spring框架...
本文将深入解析SpringMVC如何处理GET和POST请求中的参数,以及如何使用@RequestParam和@RequestBody注解。 1. GET请求 GET请求通常用于获取资源,其参数直接附加在URL路径后面,以键值对的形式存在。例如,`/api/...
// 将过滤后的JSON字符串重新写入请求体 request.setContent(content.toString().getBytes()); // 设置请求体已读,避免重复读取 request.setAttribute("org.springframework.web.multipart.support....
参数绑定过程主要介绍了SpringMVC参数绑定的机理和使用@RequestParam注解指定request请求的参数名绑定到哪个方法形参上。自定义参数绑定部分主要介绍了使用WebDataBinder和使用WebBindingInitializer两种方式实现...
SpringMVC的参数请,整理了常见的参数处理方法
SpringMVC 参数收集及乱码处理 SpringMVC 框架提供了多种参数收集方式,以满足不同的应用场景需求。 ParametersCollector 是 SpringMVC 中负责收集参数的组件,它可以从 HttpServletRequest 中获取参数,并将其...
在SpringMVC框架中,处理来自前端的各种请求参数是一项核心任务。本文将全面总结SpringMVC接收请求参数的所有方式,并探讨其背后的工作机制。 1. GET方法请求参数处理: 当使用GET方法发送请求时,参数通常附加在...
SpringMvc接收参数方法总结 SpringMvc框架中,接收参数是非常重要的一步骤,对于开发者来说,掌握多种接收参数的方法是非常有必要的。下面将总结SpringMvc框架中七种接收参数的方法。 第一种方法:...
数据验证是任何应用程序中不可或缺的部分,它帮助我们防止非法或无效的数据进入系统,从而保护系统免受潜在的攻击。在Spring MVC中,我们可以利用内建的验证支持来轻松实现这一目标。这不仅提高了代码的可读性和可...
SpringMVC 提供了自动的数据绑定功能,可以从请求参数自动填充到 Java 对象,同时也支持基于 Bean Validation 的数据验证。 十、上传下载支持 SpringMVC 提供了对文件上传和下载的支持,可以方便地处理用户的文件...
**SpringMVC 入门小程序详解** SpringMVC是Spring框架的一个重要模块,它是一个用于构建Web应用程序的轻量级、模型-视图-控制器(MVC)框架。本入门程序旨在帮助初学者理解并掌握SpringMVC的基本概念和工作流程,...
"解决springmvc项目中使用过滤器来解决请求方式为post时出现乱码的问题" Spring MVC 项目中,使用过滤器来解决请求方式为 POST 时出现乱码的问题是非常重要的。本文将详细介绍如何使用过滤器来解决这个问题,并给...
3. **SpringMVC参数绑定**:在SpringMVC中,可以使用多种方式接受JSON参数。一种常见的方法是使用@RequestParam注解,这个注解和Servlet中的request.getParameter方法有相似的功能。通过对控制器方法参数使用@...
springmvc基础 包含代码+知识点+详细解释 1. 什么是springmvc? 2. springmvc框架原理 前端控制器、处理器映射器、处理器适配器、视图解析器 3. springmvc入门程序 目的:对前端控制器、处理器映射器、处理器...
9. **数据绑定**:SpringMVC自动将请求参数绑定到控制器方法的参数,也可以自动将模型数据填充到表单中。 10. **异常处理**:通过`@ExceptionHandler`注解,可以在控制器中统一处理异常,或者在配置文件中全局定义...
在IT行业中,SpringMVC和MyBatis是两个非常重要的框架,它们分别负责Web层的控制和持久层的数据操作。本篇文章将详细讲解如何将它们整合,并实现一个通用的分页功能。 首先,SpringMVC作为Spring框架的一部分,主要...
timestamp是时间戳,data是实际的业务请求数据转化成的Json字符串再进行加密得到的密文,sign是签名,生成规则算法伪代码是SHA-256(data=xxx×tamp=11111)。为了简单起见,我们可以采用AES对称秘钥为"throwable...
之前写过通过注释的方法解决跨域请求的方法,需要每次都在controll类使用注解,这次通过springmvc的拦截器解决: 继承SpringMVC的类HandlerInterceptor重写preHandle方法,这个方法会在到达 controll之前调用,如下 ...
对于复杂的数据结构,可以使用 POJO 类绑定请求参数值,SpringMVC 会自动将请求参数填充到对象中。此外,也可以直接使用 Servlet API,如 `HttpServletRequest` 作为方法参数,获取原始请求信息。 ### 第 4 章 处理...