Servlet 过滤器

Servlet 过滤器

作用:把某些信息过滤掉

1、滤器可以做什么?
    (1) 对请求进行统一编码---》乱码处理功能
    (2) 对请求进行认证---》强制登录
    (3)过滤非法字符---》非法字段

2、实现方式
    一、实现 Filter 接口

    案例1:过滤乱码
//重写doFilter方法
    @Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
        FilterChain arg2) throws IOException, ServletException {
    HttpServletRequest request=(HttpServletRequest) arg0;//转为HttpServletRequest
    HttpServletResponse response=(HttpServletResponse) arg1;//转为HttpServletResponse
    request.setCharacterEncoding("utf-8");//请求编码
    response.setCharacterEncoding("utf-8");//响应编码
    response.setContentType("text/html;charset=utf-8");//设置响应编码类型
    arg2.doFilter(request, response);//条件成立则放行
}

Servlet容器将先调用过滤器的doFilter方法。FilterChain用户访问后续过滤器。

二、配置web.xml

<!-- 配置过滤器 -->
<filter>
    <filter-name>q1</filter-name>
    <filter-class>com.xdl.filter.FilterEncoding
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>q1</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

三、案例2:过滤非法字符
@Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
        FilterChain arg2) throws IOException, ServletException {
    HttpServletRequest request=(HttpServletRequest) arg0;
    HttpServletResponse response=(HttpServletResponse) arg1;
    String jl = request.getParameter("jl");//取 :简历中的内容
//      if(jl!=null&&(jl.contains("小日本")||jl.contains("坏蛋"))){
//          response.sendRedirect("filter.jsp");
//      }else{
//          arg2.doFilter(request, response);//放行
//      }
    PersonDaoImpl db=new PersonDaoImpl();//实例化数据库
    List<String> findSpeak = db.findSpeak();//找出扎有表中speka字段的信息
    boolean flag=false;
    for(String ss:findSpeak){
        if(jl.contains(ss)){//找到此信息,则为非法,然后就把flag设置为 true
            flag=true;

        }
    }
    if(jl!=null&&flag){
        System.out.println("重点关注此人:"+request.getRemoteAddr());
        response.sendRedirect("filter.jsp");

    }else{
        arg2.doFilter(request, response);//放行
    }
}

web.xml配置
<filter>
    <filter-name>q2</filter-name>
    <filter-class>com.xdl.filter.FilterSpeak</filter-class>
</filter>
<filter-mapping>
    <filter-name>q2</filter-name>
    <url-pattern>/SaveServlet</url-pattern>
</filter-mapping>

    四、案例3:强制登录

    //@WebFilter("/ListServlet")也可以通过全注解方式实现过滤器,只过滤ListServlet 如果用/*则全过滤 ,此时web.xml不用配置
    @Override
public void doFilter(ServletRequest arg0, ServletResponse arg1,
        FilterChain arg2) throws IOException, ServletException {
    HttpServletRequest request=(HttpServletRequest) arg0;
    HttpServletResponse response=(HttpServletResponse) arg1;
    HttpSession session = request.getSession();
    String username = (String) session.getAttribute("usename");
    if(username==null){
        response.sendRedirect(request.getContextPath()+"/index.jsp");//去登录
    }else{
    arg2.doFilter(request, response);//通过后,放行
    }
}

监听器

Servlet监听器也叫做 listener,通过它可以监听Web应用的上下文(环境)信息、Servlet请求信息、Servlet会话信息,并自动根据不同情况,在后台调用相  应的处理程序。通过监听器,可以自动激发一些操作


public class Listener1 implements HttpSessionListener, ServletContextListener,
    ServletRequestListener {
        ......}

//配置 web.xml;
     <listener>
    <listener-class>com.xdl.listener.Listener1</listener-class>
    </listener>

Md5加密

一、作用:MD5是一个安全的散列算法,输入两个不同的明文不会得到相同的输出值,根据输出值,不能得到原始的明文,即其过程不可逆,即安全性较高,目前情况下md5128位加密认为是不可解的

123+12--》135    加密码  ,解密-->135-12>123 就是将来可能会到rsa加密码算法,分为 公有密钥和私有密钥

二、开发实现
    1、只需从百度找一个md5的文件即可:MD5Utils

    2、开发注册功能
    public void saveUser(User uu) {
    String sql = "insert into stu values(stu_seq.nextval,?,?)";
    // 把密码进行md5加密
    executeUpdate(
            sql,
            new Object[] { uu.getName(), MD5Utils.MD5Src(uu.getPassword()) });
}

3、开发登录功能
public boolean loginUser(User uu) {
    String sql = "select * from stu where name=? and password=?";// 由用户和密码作条件
    ResultSet rs = executeQuery(
            sql,
            new Object[] { uu.getName(), MD5Utils.MD5Src(uu.getPassword()) });
    try {
        if (rs.next()) { // 如果找到了
            return true;
        }
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return false;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值