JSP-Filter过滤器

7 篇文章 0 订阅

过滤器

为什么需要过滤器?

在web项目中,有的时候我们不想未登录的用户或者外界没有权限者访问某一些jsp,这个时候就需要filter

FirstFilter

当访问index.jspmain.jsp的时候需要做一些处理.

配置web.xml:

<!-- 定义FirstFilter过滤器标签 -->
  <filter>
    <filter-name>FirstFilter</filter-name>
    <filter-class>com.filter.FirstFilter</filter-class>
  </filter>
   <!-- filtermapping映射标签 -->
  <filter-mapping>
    <filter-name>FirstFilter</filter-name>
    <url-pattern>/index.jsp</url-pattern>
  </filter-mapping>
  <filter-mapping>
    <filter-name>FirstFilter</filter-name>
    <url-pattern>/main.jsp</url-pattern>
  </filter-mapping>

com.filter.FirstFilter类:

/*
 * filter函数,实现了javax.servlet.Filter这个接口
 * */
package com.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;

public class FirstFilter implements Filter {

    public void destroy() {
        //当服务器关闭的时候执行
        System.out.println("FirstFilter--destroy()函数执行。。。");

    }

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        System.out.println("FirstFilter--开始。。。");
        //执行doFilter()操作,arg2,是FilterChain对象,arg1,arg2分别是request和respons对象
        HttpServletResponse response = (HttpServletResponse)arg1;
        HttpServletRequest request = (HttpServletRequest)arg0;
        response.sendRedirect(request.getContextPath()+"/main.jsp");
        //request.getRequestDispatcher(request.getContextPath()+"/main.jsp").forward(request, response);
        System.out.println("FirstFilter--结束。。。");
        arg2.doFilter(arg0, arg1);//该方法执行完后才执行下面的打印语句
        System.out.println("FirstFilter-doFilter()...");
    }

    public void init(FilterConfig arg0) throws ServletException {
        //服务器启动时候执行
        System.out.println("FirstFilter--init()函数执行。。。");

    }

}

html界面:

--------------------main.jsp-------------------
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println("this is main.jps... ");
%>
<body>
    <h1>This is main JSP page.</h1> <br>
</body>
----------------------index.jsp--------------------- 
<body> 
    &rdquo;This is my JSP page. <br>
</body>

测试:
访问index.jsp,观察控制台输出:

FirstFilter--开始。。。
this is main.jps... 
FirstFilter--结束。。。
this is index.jps... 
FirstFilter-doFilter()...

用户登录后台过滤

当用户登录成功时,可以任意访问success.jsp时候,当用户没登陆时,无法访问success.jsp

html界面:

-----------------------login.jsp---------------------------------
<body>
    <h1>用户登录</h1> <hr>
    <form action="servlet/LogServlet" name="LogIn" method="post">
        <table>
            <tr>
                <td>用户名</td>
                <td><input type="text" name="username" value=""></td>
            </tr>
            <tr>
                <td>密码</td>
                <td><input type="password" name="userpass" value=""></td>
            </tr>
            <tr>
                <td colspan="2" align="center"><input type="submit" name="submit" value="登录"></td>
            </tr>
        </table>
    </form>
  </body>
-----------------------success.jsp---------------------------------
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println("this is Success.jps... ");
%>
  <body>
    <h1>登录成功,欢迎使用!</h1> <br>
    用户:<%=request.getSession().getAttribute("name") %>
  </body>
-----------------------failure.jsp---------------------------------
<%
String path = request.getContextPath();
String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/";
System.out.println("this is failure.jps... ");
%>
<body>
    <h1>登录失败,请检查用户名或密码!</h1> <br>
  </body>
 ```

servlet-- LogDo:
```java
package com.filter;

import java.io.IOException;

import javax.jms.Session;
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.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LogDo implements Filter {

    private FilterConfig config;
    public void destroy() {
        // TODO Auto-generated method stub

    }

    public void doFilter(ServletRequest arg0, ServletResponse arg1,
            FilterChain arg2) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest)arg0;
        HttpServletResponse response = (HttpServletResponse)arg1;

        //如果request.getUri中有login.jsp,则执行dofilter()放行,不过滤
//      if(request.getRequestURI().indexOf("login.jsp")!=-1){
//          arg2.doFilter(arg0, arg1);
//          return;
//      }
        //使用init函数中的FilterConfig对象来检查是否包含要过滤的地址,如果包含就过滤
        String noLoginPaths = config.getInitParameter("noLoginPaths");
        if (noLoginPaths!=null) {
            String[] arr = noLoginPaths.split(";");
            for(String s:arr){
                if (request.getRequestURI().indexOf(s)!=-1) {
                    arg2.doFilter(arg0, arg1);//放行
                    return;
                }

            }
        }
        //在LogServlet中setAttribute中设置了name值,表示是正常登陆成功的
        if(request.getSession().getAttribute("name")!=null){
            arg2.doFilter(arg0, arg1);
            //return;//直接return表示终止代码继续运行
        }else {
            response.sendRedirect("login.jsp");
        }

    }

    public void init(FilterConfig arg0) throws ServletException {
        config = arg0;

    }

}





<div class="se-preview-section-delimiter"></div>

web.xml:

<servlet-mapping>
    <servlet-name>AsyncServlet</servlet-name>
    <url-pattern>/servlet/AsyncServlet</url-pattern>
  </servlet-mapping>
  <servlet-mapping>
    <servlet-name>LogServlet</servlet-name>
    <url-pattern>/servlet/LogServlet</url-pattern>
  </servlet-mapping>
<!-- *************过滤登录成功和失败界面****************** --> 
  <filter>
    <filter-name>LogDo</filter-name>
    <filter-class>com.filter.LogDo</filter-class>
        <init-param>
            <param-name>noLoginPaths</param-name>
            <param-value>login.jsp;LoginServlet</param-value>
        </init-param>
        <init-param>
            <param-name>charset</param-name>
            <param-value>UTF-8</param-value>
        </init-param>
  </filter>




<div class="se-preview-section-delimiter"></div>

测试:
当用户未登录时,访问success.jsp

输出错误信息。。。
this is error.jps...




<div class="se-preview-section-delimiter"></div>

当用户登录成功后,访问success.jsp

this is Login.jps... 
user detaile:admin  123
this is Success.jps... 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值