过滤器屏蔽非法字符

服务器启动时先进行所有拦截器的初始化
要用FilterChain,将请求继续向下转发。
chain.doFilter(request,response) ;没有就无法向下执行

中文过滤,统一编码方式在这里插入图片描述

硬编码不好,用filterConfig 读取web.xml配置文件里面的信息
在这里插入图片描述
可以用 getInitParameterNames 获取到web.xml里所有的配置信息
Enumberation
hasMoreElements 测试此枚举中是否包含更多的元素
nextElements 如果此枚举中至少还有一个可提供的元素,则返回此枚举的下一个元素
在这里插入图片描述
在这里插入图片描述

对于get 和post 提交处理中文的不一样

过滤器
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,ServletException{
request.setCharacterEncoding(“utf-8”);
//get/post,֪��get,post->reqeust
HttpServletRequest req=(HttpServletRequest)request;
System.out.println(req.getMethod());
if(req.getMethod().equals(“GET”)){
EncodingRequest er=new EncodingRequest(req);
chain.doFilter(er, response);
}else if(req.getMethod().equals(“POST”)){
chain.doFilter(request, response);
}

}

EncodingRequest
private HttpServletRequest req; // null
public EncodingRequest(HttpServletRequest request) {
super(request);
this.req = request;
}
//request.getParameter(name)->
public String getParameter(String name) {
String value = req.getParameter(name); // key->value iso8859-1
try {
if (value != null) {
value = new String(value.getBytes(“iso-8859-1”), “utf-8”);
}
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return value;
}

非法字符

在这里插入图片描述

在这里插入图片描述

如果出现空错误 解决办法 ,页面被拦截器拦截住了 在web和页面进行修改,
不要用 /*
在这里插入图片描述

自动跳到登录页面

public class SessionFilter implements Filter {

private List<String> uriList = new ArrayList<String>();


@Override
public void destroy() {
	// TODO Auto-generated method stub


}


// 过滤session 检测未登录,或者session过期行为
@Override
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain fc)
		throws IOException, ServletException {
	// TODO Auto-generated method stub
	// 强转
	HttpServletRequest request = (HttpServletRequest) req;
	HttpServletResponse response = (HttpServletResponse) resp;


	// 获取请求路径
	String uri = request.getRequestURI();
	boolean flag = false;
	// 遍历集合查看是否包含应该放行的路径
	for (String stringUri : uriList) {
		if (uri.indexOf(stringUri) != -1) {
			flag = true;
			break;
		}
	}
	if (flag) {
		fc.doFilter(request, response);
	} else {
		String uname = (String) request.getSession().getAttribute("uname");
		if (null != uname) {
			fc.doFilter(request, response);
		} else {
			response.setContentType("text/html;charset=gbk");
			response.setHeader("refresh", "2;URL=login.jsp");
			PrintWriter writer = response.getWriter();
			StringBuffer sb = new StringBuffer();
			sb.append("您还未登陆,请先登陆!!!<br>").append("两秒后自动跳转到登陆窗口!!!<br>")
					.append("如果没有跳转,请按<a href='login.jsp'>这里</a>!!!<br>");
			writer.write(sb.toString());


		}
	}


}


@Override
public void init(FilterConfig arg0) throws ServletException {
	// TODO Auto-generated method stub
	uriList.add("login.jsp");
	uriList.add("errors.jsp");
	uriList.add("Login");
	uriList.add("register.jsp");
	uriList.add("register?method=checkName");
	uriList.add("register?method=register");
}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值