zoukankan      html  css  js  c++  java
  • 过滤器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";
        }
  • 相关阅读:
    随机数组找丢失数据
    js打开新页面 关闭当前页 关闭父页面
    Markdown测试
    ThinkPHP中的时间自动填充 无法获取时间
    页面在谷歌浏览器和IE浏览器顶部多出空白行,火狐显示正常
    Thinkphp中验证码不显示解决办法
    106运用SWITCH语句打印星期几的单词
    声明两个变量并赋值计算出矩形的面积
    不用*用移位运算符计算21*16的数值是多少
    97.经典实例,计算球形的面积和体积
  • 原文地址:https://www.cnblogs.com/xuegu/p/6889924.html
Copyright © 2011-2022 走看看