用户登录安全控制过滤器实现没有实现

用户登录安全控制过滤器实现没有实现

index.jsp

<%@ page language="java" contentType="text/html; charset=UTF-8"

    pageEncoding="UTF-8"%>

    <%

     String flag=request.getParameter("flag");

    %>

<!DOCTYPE html>

<html>

<head>

<meta charset="UTF-8">

<title>系统登录</title>

<link rel="stylesheet" type="text/css" href="form.css">

<script type="text/javascript">

   var flag='<%=flag%>';

   if("1"==flag){

   alert("请登录系统!");

   }

</script>

</head>

<body>

<form action="login.jsp" method="post" class="smart-green">

<h1>系统登录</h1>


<label>

<span>用户名:</span>

<input id="username" type="text" name="username"/>

</label>


<label>

<span>密码:</span>

<input id="password" type="password" name="password"/>

</label>


<span>&nbsp;</span>


<label>

<input type="submit" class="button" value="登录"/>

</label>

</body>

</html>

message.jsp

Apache Tomcat v8.0 at localhost

SessionFilter

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;


public class SessionFilter implements Filter {


@Override

public void destroy() {

// TODO Auto-generated method stub


}


@Override

public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)

throws IOException, ServletException {

HttpServletRequest hrequest=(HttpServletRequest)request;

HttpServletResponse hresponse=(HttpServletResponse) response;

String loginUser=(String) hrequest.getSession().getAttribute("loginUser");

         if(loginUser==null) {

        hresponse.sendRedirect(hrequest.getContextPath()+"/index.jsp?flag=1");

        return;

         }else {

        chain.doFilter(hrequest, hresponse);

         }

}


@Override

public void init(FilterConfig filterConfig) throws ServletException {

// TODO Auto-generated method stub


}


}

Xml文件配置

<?xml version="1.0" encoding="UTF-8"?>

<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://xmlns.jcp.org/xml/ns/javaee" xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd" id="WebApp_ID" version="3.1">

  <display-name>FilterDemo</display-name>

  <welcome-file-list>

    <welcome-file>index.jsp</welcome-file>

  </welcome-file-list>

  

  <filter>

    <filter-name>characterEncodingFilter</filter-name>

    <filter-class>filter.CharacterEncodingFilter</filter-class>

    <init-param>

      <param-name>charset</param-name>

      <param-value>UTF-8</param-value>

    </init-param>

    

  </filter>

   <filter-mapping>

   <filter-name>characterEncodingFilter</filter-name>

   <url-pattern>/*</url-pattern>

   

   </filter-mapping>

   <filter>

      <filter-name>sessionFilter</filter-name>

      <filter-class>filter.SessionFilter</filter-class>

   </filter>

   <filter-mapping>

     <filter-name>sessionFilter</filter-name>

     <url-pattern>/message.jsp</url-pattern>

   </filter-mapping>

   

</web-app>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
芝芝兰兰 2019-06-01 10:32:50

同学你好。下面来一条条解答你的疑惑:

1、HttpServletRequest是ServletRequest的子接口,功能和方法更加强大。response同理。

HttpServletRequest比ServletRequest多了一些针对于Http协议的方法。如getHeader (String name), getMethod () ,getSession () 等等。

同学试一下就知道了哦。ServletRequest没有getSession的。

5cd559120001636210080393.jpg

2、Tomcat6以后,session默认是持久化的,默认生存时间是30分钟,如果需要改变生存时间,可以打开Tomcat安装目录下的conf/web.xml,进行修改:

<session-config>
<session-timeout>30</session-timeout>
</session-config>

如果需要取消持久化,需要将conf/context.xml 红框中的部分的注释取消:

http://img1.sycdn.imooc.com//climg/5cf1e1110001411608860212.jpg

3、session虽然可以持久化,但sessionId却和浏览器窗口有关。清除浏览器缓存即可清除cookie。因为sessionId保存在cookie中,所以清除浏览器缓存可以防止取到同一个session。有关session的内容,建议同学再温习一下 步骤二 · 3-3 用户会话Session对象 的内容

如果解答了同学的疑问,望采纳~

祝学习愉快~


芝芝兰兰 2019-05-31 15:16:38

同学你好。同学贴的代码中的页面是index.jsp还是message.jsp呢?

SessionFilter设置的pattern是message.jsp,只有直接访问message时才可以触发过滤,进而有flag=1。

另外,因为我们的loginUser在session中存储,session是有生存周期的,如果曾经登录过,需要清除缓存才能重现提示登录。浏览器缓存可以使用Ctrl+Shift+Delete快捷键清除。

如果解答了同学的疑问,望采纳~

祝学习愉快~


  • 提问者 慕函数4495222 #1
    Session生命周期是多久呢?忘记了,关闭不会清楚吗
    2019-05-31 22:25:42
  • 提问者 慕函数4495222 #2
    还有过滤器编写为啥要用HttpServletrequest和HttpServletresponse必须要转型吗?为什么
    2019-05-31 22:49:18
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
从网页搭建入门Java Web2018版
  • 参与学习           人
  • 提交作业       1088    份
  • 解答问题       10205    个

如果你有Java语言基础,又想以后从事Java Web开发,那么本路径是你的不二选择!本路径从网页搭建开始入手,通过大量案例来学习Java Web基础。定能助你完成Java Web小白的蜕变!

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师