您的位置:首页 > 编程语言 > Java开发

SpringMVC过滤器

2016-06-16 15:14 295 查看
http://blog.csdn.net/chenleixing/article/details/44573495

示例一:

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>

示例二:



package com.ucenter.filter;

import java.io.IOException;

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.HttpServletRequest;

import javax.servlet.http.HttpServletResponse;

import javax.servlet.http.HttpSession;

/*

 * 登录过滤器,必须登录才能访问,否则全部转发到登录页面

 */

public class LoginFilter implements Filter {

@Override
public void init(FilterConfig filterConfig) throws ServletException {

}

@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
ServletException {
// 获得在下面代码中要用的request,response,session对象
HttpServletRequest servletRequest = (HttpServletRequest) request;
HttpServletResponse servletResponse = (HttpServletResponse) response;
HttpSession session = servletRequest.getSession();

// 获得用户请求的URI
String path = servletRequest.getRequestURI();

// 从session里去用户信息
Integer userID = (Integer) session.getAttribute("userID");

// 登陆页面无需过滤
if (path.indexOf("finduser") > -1 || path.indexOf("modifypwd") > -1 || path.indexOf("resetpwd") > -1
|| path.indexOf("regist") > -1 || path.indexOf("addlog") > -1 || path.indexOf("login") > -1
|| path.indexOf("css") > -1 | path.indexOf("font") > -1 || path.indexOf("js") > -1
|| path.indexOf("images") > -1) {
chain.doFilter(servletRequest, servletResponse);
return;
}

// 判断如果没有取到员工信息,就跳转到登陆页面
if (userID == null || "".equals(userID)) {
// 跳转到登陆页面
servletResponse.sendRedirect("login");
} else {
// 已经登陆,继续此次请求
chain.doFilter(request, response);
}

}

@Override
public void destroy() {

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  过滤器 Filter