过滤器filter处理中文乱码

我部署了一个Java web应用,项目全部采用utf-8编码,在web.xml中配置了两个页面需要经过过滤器的登录和权限判定处理,其他页面不做处理,如下:
<init-param>
      <param-name>filterPages</param-name>
      <param-value>/main.html,/admin/adminMain.html</param-value>
    </init-param>
  </filter>
启动tomcat后,开始都能正常访问,也没有乱码。
于是乎,我某天在ie下将访问main.html时,邮件将编码从utf-8改为了gbk,出现了乱码,然后我又改回了utf-8,此时页面的title和页面上的两个超链接上的文字都变成了乱码:

服务器上的文件编码都是正常的,我在未手动修改浏览器中页面编码前都正常,就是改了后才出现该问题,而且自从我改了以后在其他人的电脑上访问也有这个问题,实在不明白我在浏览器上做了修改怎么就影响到服务器上了呢?
重启tomcat,重新部署项目都没用,今天将main.html文件重命名为a.html后再访问又一切正常,才发现应该是Filter搞的鬼,可是我在过滤器中也没做什么特殊处理,为何如此呢?Filter的代码如下:
   public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
        throws IOException, ServletException
    {
        HttpServletRequest httpRequest = (HttpServletRequest)request;  
        String rootPath=httpRequest.getContextPath();
        String path = httpRequest.getServletPath();
        System.out.println(path);
        if(StringUtil.splitAllToArrayList(filterPages).contains(path)){
         request.setCharacterEncoding("utf-8");
         response.setContentType("text/html;charset=utf-8");
            response.setCharacterEncoding("utf-8");
            PrintWriter out = response.getWriter();
            
         HttpSession session = httpRequest.getSession();
         String isLogin = (String) session.getAttribute("isLogin");
            if(isLogin == null || !isLogin.equals("yes")){
                out.print("<script type=\"text/javascript\">");
out.print("alert('您还没有登录,请先登录!');window.location='"+rootPath+"/login.html';");
out.print("</script>");
            }
            else{
             String userAccount = (String) session.getAttribute("userAccount");
             Dao dao = DaoFactory.getDao();
             List<Role> roles =dao.query(Role.class, Cnd.wrap("userAccount='"+userAccount+"'"));
          List<String> roleNames = new ArrayList<>();
          for (Role role : roles) {
roleNames.add(role.getRole());
}
          //登录后直接访问该地址时验证
          if("/admin/adminMain.html".equals(path) && ! roleNames.contains("administrator")){
          out.print("<script type=\"text/javascript\">");
     out.print("alert('您没有访问权限!');window.location='"+rootPath+"/login.html';");
     out.print("</script>");
          }else
                    chain.doFilter(request, response);            
            }
            out.close();
        }else {
            chain.doFilter(request, response);
    }
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值