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

Posted 夏蝉冬雪

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用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源文件的编码.所以在应该在翻译之前把编码方式设置一下问题就解决了.

 

以上是关于用Filter程序实现静态HTML页面的访问保护的主要内容,如果未能解决你的问题,请参考以下文章

如何jsp使用filter防止页面不登陆就访问

如何在经典模式下保护 IIS7 上的静态内容?

Filter学习

静态网页能禁止用url直接访问吗? 高手指点 谢谢

Java设置Filter过滤了CSS等静态文件的问题

具有授权的静态 html 页面(密码保护)? [关闭]