浏览 19754 次
锁定老帖子 主题:java Filter的实际应用一例
该帖已经被评为新手帖
|
|
---|---|
作者 | 正文 |
发表时间:2007-05-24
以下代码为项目期间,使用fiter过滤器控制统一编码和防止非法url进入
package com.tongtech.bjvsp.sysmng.filter; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.tongtech.bjvsp.sysmng.constant.ConstantServlet; public class EncodingFilter extends HttpServlet implements Filter { private FilterConfig filterConfig; // Handle the passed-in FilterConfig public void init(FilterConfig filterConfig) throws ServletException { this.filterConfig = filterConfig; } // Process the request/response pair public void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain) { try { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; boolean isValid = true; String uriStr = httpRequest.getRequestURI(); if (uriStr.indexOf(".jsp") == -1 && uriStr.indexOf(".do") == -1) { isValid = true; } else if (uriStr.indexOf("login.jsp") == -1 && uriStr.indexOf("login.do") == -1 && httpRequest.getSession().getAttribute("UserWraper") == null) { isValid = false; } if (isValid) { request.setCharacterEncoding("GBK"); filterChain.doFilter(request, response); } else { request.setCharacterEncoding("GBK"); PrintWriter out = httpResponse.getWriter(); if( uriStr.indexOf("index.jsp") == -1 ) { out.write("<script>window.parent.parent.location.href='../../login.jsp'</script>"); } else { out.write("<script>window.parent.parent.location.href='../login.jsp'</script>"); } } } catch (ServletException sx) { filterConfig.getServletContext().log(sx.getMessage()); } catch (IOException iox) { filterConfig.getServletContext().log(iox.getMessage()); } } // Clean up resources public void destroy() { } } out.write内的内容为当未登录时或Session过期时通过地址栏访问应用URL时 对于页面跳转的控制 web.xml配置 <filter> <filter-name>encodingfilter</filter-name> <filter-class>com.tongtech.bjvsp.sysmng.filter.EncodingFilter</filter-class> </filter> <filter-mapping> <filter-name>encodingfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping> 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2008-03-29
out.write("<script>window.parent.parent.location.href='../../login.jsp'</script>");
} else { out.write("<script>window.parent.parent.location.href='../login.jsp'</script>"); parent.parent麻不麻烦啊,还有../../login.jsp这是什么和什么啊 这样写感觉不友好,直接跳转到一个含login.jsp链接的错误页面不就好了 |
|
返回顶楼 | |
发表时间:2008-03-29
看来是 js 不熟啊,用:
window.top.location.href = 【login.jsp的绝对路径】 或者更好(个人认为): out.write("<script>\n"); out.write("alert('你没有登录...'); \n"); out.write("window.opener = ''; \n"); out.write("window.close(); \n"); out.write("</script>"); |
|
返回顶楼 | |
发表时间:2008-03-29
恩你的更好,改好后这个filter收藏了:)
如果不用绝对路径, else { out.write("<script>window.parent.parent.location.href='../login.jsp'</script>"); } 源码这句要删了,只有uriStr.indexOf("index.jsp")==-1才能到这步,根本不存在else |
|
返回顶楼 | |
发表时间:2008-03-30
真是晕倒,为何不使用RequestDistpach跳转?就是是使用sendRedirect貌似也比这个要好
|
|
返回顶楼 | |
发表时间:2008-04-01
楼主这样还是会乱码吧!http传递过来的编码不是GBK的吧,如果不是GBK的话,你直接就将它设置成GBK,是会乱码的。先用ISO-8859-1取出再把它转换成GBK就一定不会的。可能你现在这样也不会乱。乱码的原因是因为我们没有控制好编码的一致性,要转换编码需要人工来完成才会正确的。这个只是我在处理乱码的时候个人理解的。
|
|
返回顶楼 | |