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";
        }
  • 相关阅读:
    局域网中配置多台机器可以登录远程桌面
    集合类接口IEnumerable,IEnumerator,ICollection,IList,IDictionary理解
    C#只允许运行应用程序的一个实例的正确写法
    windows快捷启动命令
    .Net中的Attribute
    NAnt学习笔记(1) NAnt的配置文件结构和一个简单的NAnt例子
    互联网项目管理要点(转)
    .net中的对象序列化(2):三种序列化方式
    NAnt学习笔记(2) 节点的含义解释
    如何在修改checkbox状态,不触发事件
  • 原文地址:https://www.cnblogs.com/xuegu/p/6889924.html
Copyright © 2011-2022 走看看