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";
        }
  • 相关阅读:
    基于 HTML5 + WebGL 实现的垃圾分类系统
    B/S 端基于 HTML5 + WebGL 的 VR 3D 机房数据中心可视化
    基于 Web 端 3D 地铁站可视化系统
    HTML5 + WebGL 实现的垃圾分类系统
    基于HTML5 WebGL的工业化3D电子围栏
    iOS 不支持 PWA,那又怎么样?
    PWA 入门: 写个非常简单的 PWA 页面
    iOS UTI
    canOpenURL: failed for URL: "weixin://app/wx 问题解决方式
    iOS扩大UIButton按钮的可点击区域
  • 原文地址:https://www.cnblogs.com/xuegu/p/6889924.html
Copyright © 2011-2022 走看看