/**
* HTML标签过滤,防止用户恶意提交带HTML标签的数据
*
* @author liulg
*/
public class HTMLCharacterRequest extends HttpServletRequestWrapper {
public HTMLCharacterRequest(HttpServletRequest request) {
super(request);
}
@Override
public String getParameter(String name) {
String value = super.getParameter(name);
return filter(value);
}
@Override
@SuppressWarnings("unchecked")
public Map getParameterMap() {
Map<String, String[]> map = super.getParameterMap();
Map<String, String[]> map_ = new HashMap<String, String[]>();
Set<Entry<String, String[]>> set = map.entrySet();
Iterator<Entry<String, String[]>> it = set.iterator();
while (it.hasNext()) {
Entry<String, String[]> entry = it.next();
if (entry != null && entry.getValue() != null
&& entry.getValue().length > 0) {
String[] array = new String[entry.getValue().length];
for (int i = 0; i < entry.getValue().length; i++) {
array[i] = filter(entry.getValue()[i]);
}
map_.put(entry.getKey(), array);
}
}
return map_;
}
@Override
public String[] getParameterValues(String name) {
String[] values = super.getParameterValues(name);
if (values == null || values.length == 0)
return values;
for (int i = 0; i < values.length; i++) {
String str = values[i];
values[i] = filter(str);
}
return values;
}
private String filter(String value) {
if (StringUtil.isNotBlank(value)) {
value = value.replaceAll("<", "[").replaceAll(">", "]");
}
return value;
}
}
/**
* 权限访问控制
*
* @author luo
*/
public class PermitFilter implements Filter {
private static Map<String, Object> sysMenusMap = new HashMap<String, Object>();
private static String[] params = null;
private final static String LOGIN_VIEW = "/jsp/index/login.jsp";
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
String uri = request.getRequestURI();
String contextPath = request.getContextPath();
uri = uri.substring(contextPath.length());
Object obj = request.getSession().getAttribute(Constant.USER_SESSION);
if(obj == null){
//未登录可放行的访问
for (String p : params) {
if (uri.startsWith(p)) {
chain.doFilter(req, resp);
return;
}
}
//aJax访问 (未登录不可放行)
if (request.getHeader("x-requested-with") != null
&& request.getHeader("x-requested-with").equalsIgnoreCase( // ajax超时处理
"XMLHttpRequest")) {
JspUtils.print(response, "timeout");
return;
}
//普通访问 (未登录不可放行)
request.getRequestDispatcher(LOGIN_VIEW).forward(req, resp);
}else{
//是否越权访问
Users user = (Users) obj;
List<Menu> menus = new ArrayList<Menu>(user.getRose().getMenus());
boolean flag =false;
if(sysMenusMap.get(uri) != null){
for (Menu menu : menus) {
if(StringUtil.isNotBlank(menu.getMenuUrl()))
if(uri.equals("/"+menu.getMenuUrl())){
flag=true;
break;
}
}
}else{
chain.doFilter(new HTMLCharacterRequest(request), resp);
return;
}
if(flag){
// chain.doFilter(request, resp);
chain.doFilter(new HTMLCharacterRequest(request), resp);
return;
}else{
JspUtils.print(response, "<script>alert('无权访问');</script>");
return ;
}
}
}
public void init(FilterConfig config) throws ServletException {
params = config.getInitParameter("p").split(",");
RoseDao roseDao = (RoseDao) Springs.getApp().getBean("roseDaoImpl");
List<Menu> sysMenus = roseDao.findAllMenuBy_URL_NOTNULL();
for (Menu menu : sysMenus) {
sysMenusMap.put("/"+menu.getMenuUrl(), menu.getMenuName());
}
}
public void destroy() { }
}
分享到:
相关推荐
标题《xss特殊字符拦截与过滤》以及描述《滤除content中的危险HTML代码,主要是脚本代码,滚动字幕代码以及脚本事件处理代码》提示我们这个文件内容是关于XSS(跨站脚本攻击)防护的编程实现。XSS攻击是指攻击者通过...
字符过滤器主要用于防止恶意用户通过提交特殊字符或者执行SQL注入、跨站脚本攻击(XSS)等行为,保护服务器免受攻击。 一、JSP过滤器基础 JSP过滤器是基于Servlet规范的Filter接口实现的,它可以拦截请求,对请求和...
Java字符过滤器,也称为字符编码转换器,是Java编程中处理字符编码问题的重要工具。在处理文本数据时,尤其是在网络传输或者读取不同编码格式的文件时,可能会遇到字符乱码的问题。Java过滤器就是为了解决这些问题,...
总结来说,这个Java过滤器小样例提供了字符过滤和标签过滤的实现,有助于提升Web应用的安全性和数据一致性。通过研究这个项目,开发者可以学习到如何在实际项目中应用过滤器,以及处理字符编码问题,这对于任何涉及...
在开发Web应用时,我们经常会遇到一个问题:当使用Spring MVC的`@ResponseBody`注解将后端处理结果直接转化为HTTP响应体时,如果这个结果中包含HTML特殊字符,如尖角号、引号、按位与符号等,浏览器可能会误解析,...
另外,一些特殊字符可能导致HTML解析错误,也可以通过过滤器进行处理。通常,我们可以编写正则表达式来匹配和处理这些非法字符。 3. **权限过滤**: 权限过滤是Web应用安全性的重要组成部分,用于控制不同用户访问...
在开发Java Web应用程序时,尤其是使用Struts框架时,经常遇到的一个问题是字符编码不一致导致的乱码问题。本文将详细讲解如何通过设置字符编码...对于处理包含多语言或特殊字符的项目,正确设置字符编码更是至关重要。
在实际项目中,我们可能需要编写一些测试用例来验证字符编码过滤器的效果,比如包含特殊字符的表单提交,或者不同编码的URL请求等。 6. **最佳实践** - 为确保整个应用的一致性,建议在所有的HTTP响应中都明确指定...
在这个例子中,`filterHtml`方法首先使用字符串替换转义了HTML特殊字符,然后使用正则表达式匹配并删除了`<script>`、`<style>`和`<iframe>`这三个常见的危险标签。最后,通过`main`方法调用`filterHtml`来演示过滤...
这里的“java请求参数过滤拦截”主要是指在接口接收到用户输入的数据时,通过过滤器(Filter)对参数进行检查,防止恶意攻击者利用特殊字符执行SQL注入、跨站脚本攻击(XSS)等危害。下面我们将详细探讨这一主题。 ...
3. **处理`<img>`标签的特殊逻辑**:对于图片标签,过滤器会检查是否包含特定的_wap_标识,如果存在,则进行路径调整,以适应WAP环境下的图片加载要求。 4. **最终的字符串构建与返回**:经过一系列的转换和处理后,...
这可能是一个包含特殊字符、HTML标签、SQL注入攻击字符等的集合。 2. **字符串匹配**:使用正则表达式(Regular Expression)进行匹配,找出并定位非法字符。正则表达式是强大的文本处理工具,能够灵活地匹配各种...
在 `main` 方法中,我们创建了一个包含HTML的示例字符串,并调用 `removeHtmlTags` 进行过滤,最后打印出过滤后的结果。 当然,这种方法并不是万能的,它可能无法处理复杂的HTML结构,例如嵌套的标签、属性、注释等...
### 过滤器(Filter)概述与应用 #### 一、Filter简介 过滤器(Filter)作为Servlet技术中的一项重要特性,为Web开发者提供了强大的工具,用于对Web服务器上托管的各种资源进行拦截处理。这些资源包括但不限于JSP...
一个常见的过滤器示例是字符集编码过滤器,用于确保所有请求都以正确的字符集解析: ```java @WebFilter(filterName = "CharacterEncodingFilter", urlPatterns = "/*") public class CharacterEncodingFilter ...
在Java Web开发中,Servlet过滤器(Filter)是一种强大的工具,它可以用来处理各种问题,包括但不限于解决字符编码问题。在标题“servlet过滤器配置,解决JSP的所有乱码”和描述“JSP页面获得servlet是不是经常出现...
同时,Filter 也可以用于实现一些特殊的功能,例如禁用页面缓存、字符编码过滤器等。然而,Filter 也存在一些缺点,例如可能会影响应用程序的性能,需要合理地使用 Filter。 在实际应用中,Filter 广泛应用于各种 ...
例如,如果你发现你的网页中有一些不理想的字符,如特殊符号、非ASCII字符或者是被黑客插入的恶意代码,你可以使用字符替换器来批量替换这些内容,而无需逐个手动修改。 在描述中提到的CMS(内容管理系统)场景中,...
4. 编码转换:为了防止编码绕过,需要对某些特殊字符进行转义,例如将`转换为`<`,防止HTML标签被误解释。 5. 输出重构:在应用所有过滤规则后,将修改后的解析树转换回HTML字符串,供服务器发送给客户端。 ...