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

  • 相关阅读:
    活久见!Jmeter也能实现文件传输和发送邮件啦
    震惊!资深测试开发已经不用postman测试接口了!
    app测试日志如何获取,logcat值得拥有
    TestNG学会了,Java单元测试你就掌握了一半
    超实用:精准衡量接口测试覆盖率
    Reviewboard用户指南(1.3)—— Getting Started: General Workflow
    Reviewboard用户指南(1.2)—— Getting Started: What is Code Review?
    Reviewboard用户指南(1.4)—— Getting Started: Account Settings
    Reviewboard管理员指南(4.1)—— Overview of the Administration UI
    Reviewboard用户指南(6.4)——Issue Tracking
  • 原文地址:https://www.cnblogs.com/Baronboy/p/5402141.html
Copyright © 2011-2022 走看看