过滤器Filter的使用(以登录为例子)

使用过滤器步骤:

(1)在web.xml文件中添加过滤器(以下例子是过滤多个请求)

<!-- 用户登录过滤 -->
  <filter>
      <filter-name>loginFilter</filter-name>
      <filter-class>com.learning.filter.loginFilter</filter-class>
  </filter>
  <filter-mapping>
      <filter-name>loginFilter</filter-name>
      <url-pattern>/classes/classesPageInfo.do</url-pattern>
  </filter-mapping>
  <filter-mapping>
      <filter-name>loginFilter</filter-name>
      <url-pattern>/note/notePageInfo.do</url-pattern>
  </filter-mapping>
  <filter-mapping>
      <filter-name>loginFilter</filter-name>
      <url-pattern>/ask/asksPageInfo.do</url-pattern>
  </filter-mapping>

 (2)过滤器类

package com.learning.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{
    private String encoding;

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

    @Override
    public void doFilter(ServletRequest req, ServletResponse resp,
            FilterChain filterChain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        HttpServletResponse response = (HttpServletResponse) resp;
        HttpSession session = request.getSession();
        String loginName = (String) session.getAttribute("loginName");
        //判断当前用户是否已经登录,若未登录跳到登录页面
        if (loginName == null || loginName=="") {
            String goUrl = request.getRequestURL().toString() + "?" +request.getQueryString().toString();
            session.setAttribute("goUrl", goUrl);
            request.getRequestDispatcher("/user/log.jsp").forward(request, response);
            return ;
        } else {
            filterChain.doFilter(req, resp);
        }    
    }

    @Override
    public void init(FilterConfig filterConfig) throws ServletException {
        encoding = "utf-8";
    }

}

注:这个主要的作用是将过滤前的地址记录下来,登录成功之后跳转到过滤前的页面

String goUrl = request.getRequestURL().toString() + "?"+request.getQueryString().toString();
session.setAttribute("goUrl", goUrl);

(3)登录页面的form表单代码

<form action="<%=path%>person/dologin.do" name="loginform"
                            accept-charset="utf-8" id="login_form" class="loginForm"
                            method="post">
                            <input type="hidden" name="did" value="0" /> <input type="hidden"
                                name="to" value="log" />
                            <div class="uinArea" id="uinArea">
                                <label class="input-tips" for="u">账号:</label>
                                <div class="inputOuter" id="uArea">

                                    <input type="text" id="u" name="username" class="inputstyle" />
                                </div>
                            </div>
                            <div class="pwdArea" id="pwdArea">
                                <label class="input-tips" for="p">密码:</label>
                                <div class="inputOuter" id="pArea">

                                    <input type="password" id="p" name="password"
                                        class="inputstyle" />
                                </div>
                            </div>
                            <div style="padding-left:50px;margin-top:20px;">
                                <input type="submit" value="登 录" style="150px;"
                                    class="button_blue" />
                            </div>
                        </form>

(4)登录表单提交后通过action跳到控制层,并根据情况跳到不同的地方

// 用户登录
    @RequestMapping("/dologin.do")
    public String doLogin(@RequestParam("username") String username,
            @RequestParam("password") String password, HttpSession session) {
        Map param = new HashMap();
        param.put("loginName", username);
        param.put("loginPwd", password);
        // 判断用户是否存在
        User user = personServiceImpl.findUserInfo(param);
        session.setAttribute("loginName", user.getLoginName());
        session.setAttribute("userPower", user.getUserPower());
        String goUrl = (String) session.getAttribute("goUrl");
        if (goUrl != null) {
            return "redirect:" + goUrl;
        }
        return "redirect:/mainpage/tomainpage.do";
    }
原文地址:https://www.cnblogs.com/xuegu/p/6889924.html