关闭

Java Web---登录验证和字符编码过滤器

标签: Java-Web过滤器登录验证字符编码
1057人阅读 评论(2) 收藏 举报
分类:

什么是过滤器?

在Java Web中,过滤器即Filter。Servlet API中提供了一个Filter接口(javax.servlet.Filter),开发web应用时,如果编写的Java类实现了这个接口,则把这个Java类称之为过滤器Filter。通过Filter技术,开发人员可以实现用户在访问某个目标资源之前,对访问的请求和响应进行拦截。简单说,就是可以实现web容器对某资源的访问前截获进行相关的处理,还可以在某资源向web容器返回响应前进行截获进行处理。

创建一个Filter的步骤

1.创建一个Filter处理类(实现javax.servlet.Filter接口)
2.在web.xml文件中配置Filter

Filter执行流程

1.Filter对用户的请求进行预处理
2.处理好后将请求交给Servlet处理并生成响应
3.最后Filter再对服务器响应进行后处理

字符编码过滤器

CharacterFilter.java

package org.LabReserve.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;

public class CharacterFilter implements Filter {   //实现Filter接口
    private String character;   //保存字符编码的类型

    @Override
    public void destroy() {   //在Filter销毁前,完成某些资源的回收

    }

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse,
            FilterChain filterChain) throws IOException, ServletException {
        servletRequest.setCharacterEncoding("utf-8");           //可以直接设置编码
        servletResponse.setCharacterEncoding(character);    //也可以读取初始化的参数character
        filterChain.doFilter(servletRequest, servletResponse);   //转到下一个过滤器
    }

    @Override
    public void init(FilterConfig fc) throws ServletException {   //完成Filter的初始化
        //读取web.xml中Filter配置的初始化参数
        character = fc.getInitParameter("character");
    }

}

web.xml文件中的配置

<!-- 定义一个Filter -->
    <filter>
        <!-- Filter的名字 -->
        <filter-name>CharacterFilter</filter-name>
        <!-- Filter的实现类 -->
        <filter-class>org.LabReserve.filter.CharacterFilter</filter-class>
        <!-- 初始化参数 -->
        <init-param>
            <!-- 参数名 -->
            <param-name>character</param-name>
            <!-- 参数值,编码为utf-8 -->
            <param-value>utf-8</param-value>
        </init-param>
    </filter>
    <!-- 定义Filter要拦截的url地址 -->
    <filter-mapping>
        <!-- Filter的名字 -->
        <filter-name>CharacterFilter</filter-name>
        <!-- 要拦截的url,这里是全部拦截 -->
        <url-pattern>/*</url-pattern>
    </filter-mapping>

登录验证过滤器

LoginFilter.java

package org.LabReserve.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 {

    @Override
    public void destroy() {

    }

    @Override
    public void doFilter(ServletRequest servletRequest,
            ServletResponse servletResponse, FilterChain filterChain)
            throws IOException, ServletException {
        // 转换为HTTP请求对象
        HttpServletRequest request = (HttpServletRequest) servletRequest;
        // 转化为HTTP响应对象
        HttpServletResponse response = (HttpServletResponse) servletResponse;
        // 获得请求对应的session对象
        HttpSession session = request.getSession();

        // 获得用户请求的URI
        String path = request.getRequestURI();

        // 不用验证登录过滤的页面
        String[] noCheckPages = { "index.jsp","findPassword.jsp",
                "LoginServlet","UserServlet",
                "css","images","js"};

        // int indexOf(int ch) 返回指定字符在此字符串中第一次出现处的索引。没找到则返回-1
        for (int i = 0; i < noCheckPages.length; ++i) {
            if (path.indexOf(noCheckPages[i]) > -1) {
                // 转到下一个过滤器
                filterChain.doFilter(servletRequest, servletResponse);
                return;   //不再过滤,防止页面重定向循环
            }
        }

        // 如果session为null,说明用户是第一次访问
        if (session.getAttribute("userId") != null
                || session.getAttribute("teacherId") != null
                || session.getAttribute("adminId") != null) {
            // 转到下一个过滤器
            filterChain.doFilter(request, response);
        } else {
            // 重新定向到首页
            response.sendRedirect("index.jsp");
            return;   //不再过滤,防止页面重定向循环
        }
    }

    @Override
    public void init(FilterConfig arg0) throws ServletException {

    }

}

web.xml文件配置

<filter>
        <filter-name>LoginFilter</filter-name>
        <filter-class>org.LabReserve.filter.LoginFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>LoginFilter</filter-name>
        <url-pattern>/*</url-pattern>
    </filter-mapping>

参考链接:http://lavasoft.blog.51cto.com/62575/275586/
http://www.cnblogs.com/lyp3314/archive/2012/11/03/2752097.html

0
0
查看评论

Servlet实现字符编码过滤器

1:html       设置页面编码         通过Servlet设置页面编码               ...
  • pangqiandou
  • pangqiandou
  • 2016-10-26 18:12
  • 1262

java过滤器---用户登陆校验的简单实例

核心功能:对于用户的访问进行校验,看用户是否已经登陆 1.登陆界面代码如下: <%@ page language="java" contentType="text/html; charset=utf-8" pageEncoding="...
  • a1491758730
  • a1491758730
  • 2015-11-22 22:04
  • 1679

自定义字符编码过滤器

本过滤器主要对Post、Get提交请求进行拦截,设置需要的编码,解决中文乱码问题。 自定义字符编码过滤器类EncodingFilter实现Filter接口,实现init、doFilter、destory方法 EncodingFilter.java: import java.io.IOExcep...
  • lidawei201
  • lidawei201
  • 2013-01-15 18:15
  • 1479

JAVA中的使用Filter过滤器设置字符集

Filter是什么? Filter不是一个Servlet,它可以叫做Servlet链,它可以用来改变一个request,修改一个response。它虽然不能产生一个response,但可以在一个request到大Servlet之前预处理request,也可以在response离开Servlet时处理...
  • u010066934
  • u010066934
  • 2015-07-20 20:01
  • 3313

Spring自带字符编码过滤器

Java Web项目添加Spring支持后,可使用Spring自带的字符编码过滤器。 源码在spring-web-4.1.0.RELEASE.jar包,org.springframework.web.filter目录的CharacterEncodingFilter.java。 使用方法: 在w...
  • youngage
  • youngage
  • 2016-05-09 22:28
  • 3836

Spring Mvc那点事---(19)Spring Mvc过滤器Filter实现登陆验证

上一节我们演示了过滤器Filter的基本用法,这一节我们通过实例来看下过滤器怎么实现用户登陆判断,如果用户登陆成功跳转到首页,如果用户未登陆,跳转到登陆页面。
  • zx13525079024
  • zx13525079024
  • 2016-07-03 16:29
  • 1165

使用filter过滤器实现登陆权限验证

1.首先写一个权限过滤filter类,实现Filter接口import javax.servlet.Filter;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import...
  • lip009
  • lip009
  • 2006-10-17 09:58
  • 13809

过滤器设置编码

util包中:       添加类 CharacterEncodingFilter implementsFilter         destroy方法 doFilter方法中: // 转换为HttpServletRequ...
  • yiyiwudian
  • yiyiwudian
  • 2014-02-27 22:29
  • 727

过滤器验证登录

昨天做了登录验证的过滤器,放于此处,方便大家,方便自己。 功能:验证用户是否已登录,如果没登录,在打开其他页面时一律不允许,跳到登录页面,登录后方可浏览。   类:SecurityFilter。   import javax.servlet.Filt...
  • zwj1030711290
  • zwj1030711290
  • 2015-12-30 10:34
  • 202

登录验证过滤器

1.过滤器类 public class LoginFilter implements Filter {  private String weblogin = "/login.jsp"; // web页面登陆页面  //private final stat...
  • lifuxiangcaohui
  • lifuxiangcaohui
  • 2012-11-13 13:57
  • 729
    个人资料
    • 访问:49091次
    • 积分:780
    • 等级:
    • 排名:千里之外
    • 原创:28篇
    • 转载:0篇
    • 译文:0篇
    • 评论:17条
    文章分类
    最新评论