Spring MVC过滤器-登录过滤(未测试)

来源:互联网 发布:java中单选按钮 编辑:程序博客网 时间:2024/06/05 16:34

以下代码是继承OncePerRequestFilter实现登录过滤的代码:

package com.test.spring.filter; import java.io.IOException;import java.io.PrintWriter; import javax.servlet.FilterChain;import javax.servlet.ServletException;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse; import org.springframework.web.filter.OncePerRequestFilter; /** * 登录过滤 *  * @author geloin * @date 2012-4-10 下午2:37:38 */public class SessionFilter extends OncePerRequestFilter {     /*     * (non-Javadoc)     *      * @see     * org.springframework.web.filter.OncePerRequestFilter#doFilterInternal(     * javax.servlet.http.HttpServletRequest,     * javax.servlet.http.HttpServletResponse, javax.servlet.FilterChain)     */    @Override    protected void doFilterInternal(HttpServletRequest request,            HttpServletResponse response, FilterChain filterChain)            throws ServletException, IOException {         // 不过滤的uri        String[] notFilter = new String[] { "login.html", "index.html" };         // 请求的uri        String uri = request.getRequestURI();         // uri中包含background时才进行过滤        if (uri.indexOf("background") != -1) {            // 是否过滤            boolean doFilter = true;            for (String s : notFilter) {                if (uri.indexOf(s) != -1) {                    // 如果uri中包含不过滤的uri,则不进行过滤                    doFilter = false;                    break;                }            }            if (doFilter) {                // 执行过滤                // 从session中获取登录者实体                Object obj = request.getSession().getAttribute("loginedUser");                if (null == obj) {                    // 如果session中不存在登录者实体,则弹出框提示重新登录                    // 设置request和response的字符集,防止乱码                    request.setCharacterEncoding("UTF-8");                    response.setCharacterEncoding("UTF-8");                    PrintWriter out = response.getWriter();                    String loginPage = "....";                    StringBuilder builder = new StringBuilder();                    builder.append("<script type=\"text/javascript\">");                    builder.append("alert('网页过期,请重新登录!');");                    builder.append("window.top.location.href='");                    builder.append(loginPage);                    builder.append("';");                    builder.append("</script>");                    out.print(builder.toString());                } else {                    // 如果session中存在登录者实体,则继续                    filterChain.doFilter(request, response);                }            } else {                // 如果不执行过滤,则继续                filterChain.doFilter(request, response);            }        } else {            // 如果uri中不包含background,则继续            filterChain.doFilter(request, response);        }    } }

写完过滤器后,需要在web.xml中进行配置:

<filter>    <filter-name>sessionFilter</filter-name>    <filter-class>com.test.spring.filter.SessionFilter</filter-class></filter><filter-mapping>    <filter-name>sessionFilter</filter-name>    <url-pattern>/*</url-pattern></filter-mapping>
0 0
原创粉丝点击