用Filter程序实现静态HTML页面的访问保护

今天为练习Filter的用法编写了一个小程序.

当用户通过article的超链接读取文章的时候,会通过Filter进行检测有没有登录.只有登录的读者才能跳到文章页面,否则跳到登录页面.

 

文章就用简单的article1 和article2 的html页面来表示

这是Filter的代package a2;


import java.io.IOException;
import java.io.UnsupportedEncodingException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;

import com.sun.jersey.spi.dispatch.RequestDispatcher;

public class LogonFilter implements Filter {
  
    @Override
    public void destroy() {
        // TODO Auto-generated method stub

    }

    @Override
    public void doFilter(ServletRequest request, 
            ServletResponse response,
            FilterChain chain) 
       throws IOException, ServletException {
        //这里将ServletRequest转化为子类处理类HttpServletRequest
        HttpServletRequest req=(HttpServletRequest) request;
        //获得Session会话
        HttpSession session=req.getSession();
    //判断session里面是否有用户名属性
        if(session.getAttribute("logonUser")==null)
        {  //获得URL去掉前面部分,然后转发为相对路径
            String requestURI=req.getRequestURI();
            String contextPath=req.getContextPath();
            String forwardURI=requestURI.substring(contextPath.length());
            session.setAttribute("viewPage", forwardURI);
            javax.servlet.RequestDispatcher rd=req.getRequestDispatcher("/logon.jsp");
            rd.forward(req, response);
            
        }
        else{
      //如果没有用户名也要放行
            chain.doFilter(request, response);
            
        }
        
        


    }

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


        
        
        
    }

}


下面是article的html页面,当访问它的超链接的时候就会通过Filter,Filter在web.xml中设置.


<!DOCTYPE html>
<html>
  <head>
    <title>articles.html</title>
    
    <meta name="keywords" content="keyword1,keyword2,keyword3">
    <meta name="description" content="this is my page">
    <meta name="content-type" content="text/html; charset=UTF-8">
    
    <!--<link rel="stylesheet" type="text/css" href="./styles.css">-->

  </head>
  
  <body>
    <a href="article1.html" target="_blank">阅读第1篇文章</a>
    <a href="article2.html" target="_blank">阅读第2篇文章</a> 
       

  </body>
</html>



下面是web.xml的配置


<filter>
      <filter-name>LogonFilter</filter-name>
      <filter-class>a2.LogonFilter</filter-class>
  
  </filter>
  <filter-mapping>
      <filter-name>LogonFilter</filter-name>
      <url-pattern>/articles.html</url-pattern>
  </filter-mapping>



总结:开始运行的时候发现article1和2 会乱码,但是article没有.当手动改变浏览器的编码方式的时候.乱码就没有了.通过以前所学的知识可以知道这是因为浏览器默认的编码方式是服务器的编码方式.浏览器的默认编码方式就是html翻译成Servlet源文件的编码.所以在应该在翻译之前把编码方式设置一下问题就解决了.

转载于:https://www.cnblogs.com/Baronboy/p/5402141.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值