zoukankan      html  css  js  c++  java
  • 17. JSP

    当用户访问某网站时,有些页面或 Servlet 在不登录的情况下是可以访问的,例如首页、登录页面等。除此之外大部分资源是必须登录后才能访问的。此时,可以定义一个权限过滤器,对每一个访问该应用的请求进行过滤:若具有访问权限,则直接跳转到相应资源即可;若不具有访问权限,则跳转到登录页面。
    修改一下之前写过的登录功能,当用户没有登录时,不能访问login_success页面。

    讲下思路: 

    实现过滤器,获取到hsq和 hsp【这里强转即可】,然后我们取到Session,判断是否登录【Session参数是否为空】,如果为空,则直接返回去,如果是有登录,我们让他看到未登录看不到的JSP:

    因为要过滤 所以在WebContent文件夹下创建一个文件夹存放 登录成功才能被查看的JSP,这里是否登录成功用Servlet + 重定向 来写:

    首先来个代码结构:

    login.jsp:

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html lang="en">
    <head>
        <meta charset="UTF-8">
        <meta name="viewport" content="width=device-width, initial-scale=1.0">
        <title>Document</title>
    </head>
    <body>    
    
        <!-- 非常简单的一个登录 输入密码bi-hu就往Session里填充 -->
        <form action="${ pageContext.request.contextPath }/login" method="post" accept-charset="utf-8">
            请输入秘钥登录:<input type="password" name="pass" >
            <input type="submit" value="登录">
        
        </form>
    
    </body>
    </html>

      

    login.java【这个是登录判断的Servlet】

    package Servlet;
    
    import java.io.IOException;
    import java.io.PrintWriter;
    
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     * 登录Servlet 后台
     */
    public class login extends HttpServlet {
    
        protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
            
        }
    
        
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
                String password = request.getParameter("pass");
                
                HttpSession session = request.getSession();
                if(password.equals("bi-hu")) {
                    session.setAttribute("isLogin",true );
                    PrintWriter out  = response.getWriter();
                    out.print( "您已登录成功 请访问 login_success/ok.jsp 查看你的的信息吧!  ");
                }else {
                        //密码错误就重定向 就不提示什么了 简单测试
                         response.sendRedirect(request.getContextPath() + "/login.jsp");
                         
                    
                }
        }
    
    }

    cuccess.java 【这是过滤器 过滤全部代码 其中加判断拦截未登录用户【返回登录页面】 记得XML配置】

    package filter;
    
    import java.io.IOException;
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    
    /**
     *     过滤器 过滤未登录的请求    //此过滤器已设置过滤全部网址
     */
    public class cuccess implements Filter {
        
        
    
        public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
            //好习惯 先来个编码:
            request.setCharacterEncoding("UTF-8");
            response.setContentType("text/html;charset=utf-8");
            
            //先拿到带Http的Request 和 response 先 【ServletRequest 和 ServletResponse的子类】
            HttpServletRequest hsq = (HttpServletRequest)request;
            HttpServletResponse hsp = (HttpServletResponse)response;
            //获取请求的路径    【注意这里是请求路径 不是根路径!!】
            String path = hsq.getServletPath();
            if(path.startsWith("/login_success")) {
                HttpSession session = hsq.getSession();
                if(session == null) {
                    hsp.sendRedirect(hsq.getContextPath() + "/login.jsp");        //重新登录 Session为空
                }else {
                    if(session.getAttribute("isLogin") == null || ((boolean)session.getAttribute("isLogin") == false)) {
                        hsp.sendRedirect(hsq.getContextPath() + "/login.jsp");    //重新登录 Session为空 或 为假
                    }
                }
            }
            
            
            
            chain.doFilter(request, response);
        }
    }

    login_success 目录下的 ok.jsp  :

    <%@ page language="java" contentType="text/html; charset=UTF-8"
        pageEncoding="UTF-8"%>
    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>Insert title here</title>
    </head>
    <body>
            <h1>你已登录! 你看到我了!!!</h1>
    </body>
    </html>

    所以你可以尝试:

    http://localhost:8080/filter/login_success/ok.jsp 你未登录 访问他 会无限返回登录页面

    本文来自博客园,作者:咸瑜,转载请注明原文链接:https://www.cnblogs.com/bi-hu/p/14867137.html

  • 相关阅读:
    java--exceptions
    java-interface
    Java笔记
    memcpy
    const 关键字
    LeeCode整数 反转
    函数调用运算符笔记
    cvCreateImage
    c++继承笔记1
    虚拟机下的debian无法登陆
  • 原文地址:https://www.cnblogs.com/bi-hu/p/14867137.html
Copyright © 2011-2022 走看看