用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源文件的编码.所以在应该在翻译之前把编码方式设置一下问题就解决了.

时间: 2024-08-05 14:43:02

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

小蚂蚁学习页面静态化(2)——更新生成纯静态化页面的三种方式

更新生成纯静态化页面的三种方式:1.按照时间间隔更新.2.手动更新.3.定时更新(需要系统配合). 1. 按照时间间隔更新. 当用户第一次访问这个页面的时候,程序自动判断,该静态文件是否存在,并且该文件是否还在有效时间内,如果该文件未超出了有效时间,用户访问的是已经生成的静态文件.如果超出了有效时间,用户得到的是动态输出的内容,同时重新生成静态文件.稍微修改一下昨天的代码为例: <?php //首先判断是否有静态文件,并且文件的最新修改时间到现在是否大于20秒 if(is_file('./tex

利用PHP的ob函数实现生成静态化页面

之前用过一些开源的CMS管理系统,当时就很好奇后台中的生成HTML静态文件是怎么实现的.今天和同事讨论了下,没想到同事之前做过这类的生成静态页面的功能,果断向他请教了下. 经他讲解后,才知道其实生成静态HTML页面很简单.PHP提供了专门的函数来实现. 以下整理出方法(实现生成html这应该只是其中一种方法): 通过php的ob缓存来实现 提高速度 1,通过php的ob缓存来实现 使用php的ob缓存实现页面静态化 修改php.ini配置文件 output_buffering=Off 1,缓存:

PHP静态化页面(转载)

什么是PHP静态化PHP静态化的简单理解就是使网站生成页面以静态HTML的形式展现在访客面前,PHP静态化分纯静态化和伪静态化,两者的区别在于PHP生成静态页面的处理机制不同. 将PHP的执行页面预先转换成HTML,是所谓的PHP静态化方法之一. 为什么要让网页静态化 一.加快页面打开浏览速度,静态页面无需连接数据库打开速度较动态页面有明显提高:二.有利于搜索引擎优化SEO,Baidu.Google都会优先收录静态页面,不仅被收录的快还收录的全:三.减轻服务器负担,浏览网页无需调用系统数据库:四

静态web页面与动态web页面的区别

一.静态web页面 在静态web程序中,客户端使用web浏览器经过网络连接到服务器上,使用HTTP协议发起一个请求(Request),告诉服务区我现在需要得到哪个页面,所有的请求交给web服务器,之后web服务器根据用户的需求,从文件系统(存放了所有静态页面的磁盘)取出内容.之后通过web服务器返回给客户端,客户端接收到内容之后经过浏览器渲染解析,得到显示的效果. 为了让静态web页面显示更加好看,使用javascript/VBScript/ajax.但是这些特效都是在客户端上借助于浏览器展现给

首次使用photoshop制作简单的静态网页页面

刚刚进入IT领域,我首先接触到的是PhotoShop软件.经过一周的学习,我对PS软件已经有了初步的认识.PS首先是一款修图软件,对于图片中不太美观的地方可以按照自己的想法做任意的修改,利用"蒙版"工具可以做图片间的融合,这给我们提供了巨大的创作空间:其次,它可以进行图片和动画的制作,静态网页页面和多张图片的联动动画都可以在这里完成. 周五我做了两个简单的静态网页页面:网上购物的注册界面和登录页面,也借此检测一下自己对PS软件的掌握程度.在制作过程中,我发现许多问题并从中总结到了一些经

静态化页面点击数实时的呈现的两种方法

静态化页面有时需要某一块“活起来”...在做新闻类项目时会碰到点击量排行,需要实时的进行显示, 以下是实现的两种方法: 第一种方法:通过AJAX实现:将数据提交给PHP文件经行处理,并将处理后的结果返回: $(function(){ $.ajax({ url:'{$smarty.const.BASE_URL}news/clickNews.php', data:'id={$arr.id}', success:function(re){ $("#showNewsTop").html(re)

IIS开启伪静态后html静态页面无法访问的解决方法

IIS开启伪静态后,发现原本存在的html静态页面无法访问了,显示的404错误.网上查了下,是因为实现伪静态就是使用 URLRewriter 来映射后缀,会把asp等动态页面映射成html,但是原来存在的html静态页面也被定义的规则映射到其它页面了,所以找不到页面而无法访问. 有一个很简单的方法就是将html页面的后缀名改成htm,或者是把映射的规则改成映射为htm,总之就是把我们的伪静态页面和真正的静态页面分别用html和htm区分开来,但这只是治标不治本的方法. 最好的方法就是修改伪静态规

使用Filter跟踪Asp.net MVC页面加载(转)

转载地址:http://www.cnblogs.com/JustRun1983/p/4027929.html 最近,客户一直反馈系统使用慢,有时候能够指出具体是哪个页面,有时候又只是笼统地反馈慢.这种问题就像是幽灵一样,非常不好处理.因为导致这种问题的因素非常之多,而且在开发工程中,很难模拟出实际运行是的环境.理论上,对于所有的页面做压力测试是个解决方案,但是这种方式的成本太高,又没有办法很快地定位和解决客户的问题. 最后,考虑通过创建Filter来在访问Action之前记录一个时间,在页面Re

apache静态化页面

Apache开启静态化页面 博主未解决的坑: 本人首次搭建LAMP采用的是编译安装HTTPD服务,在开启静态化页面时发现在httpd.conf中没有LoadModule rewrite_module libexec/mod_rewrite.so代码,手动添加进去重启apache时报错: 查看文件.htaccess也正常: # BEGIN WordPress <IfModule mod_rewrite.c> RewriteEngine On RewriteBase / RewriteRule ^