我的过滤器好像失效了 直接 index?flag=1可以,但是登陆 不提示alert

我的过滤器好像失效了 直接 index?flag=1可以,但是登陆 不提示alert

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;

//这是一个 过滤器类   实现了过滤器接口

//在xml中 对过滤器进行配置操作
public class CharacterEncodingFilter implements Filter {

private FilterConfig config;


public FilterConfig getConfig() {
return config;
}

public void setConfig(FilterConfig config) {
this.config = config;
}

@Override  //销毁方法,在销毁过滤器对象的时候,做一些清理操作
public void destroy() {
//System.out.println("characterEncoding Filter destroy... ...");

}

@Override //  doFilter 关键方法完成过滤器功能的时候 ,调用FilterChain
//这个对象中 chain方法来通知web服务器请求预处理操作,完成接下来进一步操作
//或者调用下一个过滤器,如果没有过滤器,进入。。方法处理请求
//当在过滤器的 doFilter方法中,
//完成过滤器功能
//ServletRequest   请求预处理
//ServletResponse  响应后处理
//FilterChain      过滤器链对象  进行封装 变成chain这个参数 
//传到过滤器对象中
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
//.xml获得的值
request.setCharacterEncoding(config.getInitParameter("charset"));

chain.doFilter(request, response);



//	System.out.println("characterEncoding Filter doFilter... ...");
//	//首先获得系统名称    .xml获得的值
//	String systemName = config.getInitParameter("systemName");
//	String version = config.getInitParameter("version");
//
//	System.out.println("systemName:"+systemName);
//	System.out.println("version:"+version);


//通知web服务器我的请求拦截处理已经完成了,请进行下一步操作
//或者执行过滤器链里面的下一个过滤器,如果没有执行对应的请求,
//对请求资源做一个处理


}

@Override   //初始化方法
//FilterConfig过滤器配置类 ,设置初始化参数 封装成配置类对象
public void init(FilterConfig config) throws ServletException {
//System.out.println("characterEncoding Filter init... ...");
//创建get/set方法后传入参数配置对象
this.config = config;

}
}
、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、、
  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>
   							 <!--过滤器配置-->
    
    <!-- 1、注册过滤器 让web服务器识别到过滤器对请求做拦截处理 -->
    
    <filter> <!--过滤器名称  -->
    	<filter-name>charactEncodingFilter</filter-name>
    		 <!--过滤器类  -->
    	<filter-class>filter.CharacterEncodingFilter</filter-class>
    	
    <!--  -->
			 <!--过滤器初始化参数配置  回到characterEncodingFilter类  -->
    <init-param>
    	<param-name>systemName</param-name>
    	<param-value>filter Encoding</param-value>
    </init-param>
    
      <init-param>
    	<param-name>charset</param-name>
    	<param-value>UTF-8</param-value>
    </init-param>
    
      <init-param>
    	<param-name>version</param-name>
    	<param-value>1.0</param-value>
    </init-param>
    
    
    </filter>
    
    
  	<!-- 2、拦截映射配置 指定我们的过滤器对哪些请求做拦截处理 -->
      
    <filter-mapping>
    	<filter-name>charactEncodingFilter</filter-name>
    	    <!-- 对所有 请求都做拦截处理-->
    	<url-pattern>/*</url-pattern>
    </filter-mapping>
    
    
    <!--  -->
    
    <!--SessionFilter过滤器注册配置  -->
    
    <filter>
    	<filter-name>sessionFilter</filter-name>
    				 <!-- 包名.java名 -->
    	<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回答

同学你好。同学的意思是不是没有登录的时候,访问“http://localhost:8080/FilterDemo/message.jsp”的时候弹不出alert呢?将同学提供的这部分代码拼入老师的源码中,运行之后,是可以正常的跳转,并且弹出呢~

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

同学贴的是字符编码过滤器,CharacterEncodingFilter呢~同学可以看一下自己的filter包下是否有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;

/**
 * 用户登录安全控制过滤器
 * 
 * @author lv
 *
 */
public class SessionFilter implements Filter {

	@Override
	public void destroy() {

	}

	@Override
	public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
			throws IOException, ServletException {

		HttpServletRequest hrequest = (HttpServletRequest) request;// 涉及到HTTP请求处理,转型处理
		HttpServletResponse hresponse = (HttpServletResponse) response;// 涉及到HTTP请求处理,转型处理

		String loginUser = (String) hrequest.getSession().getAttribute("loginUser");// 判断用户是否完成了登录操作,session中是否存储用户名

		if (loginUser == null) {
			hresponse.sendRedirect(hrequest.getContextPath() + "/index.jsp?flag=1");// 未登录,系统强制重定向至登录页面
			return;
		} else {
			chain.doFilter(hrequest, hresponse);
			return;
		}

	}

	@Override
	public void init(FilterConfig config) throws ServletException {

	}

}

祝学习愉快~

  • LLLL_ 提问者 #1
    我今天 ,有接着学习了 项目案例 ,仍然问题出现在了这个环节上,在我这里查不出错误,我用的也是谷歌浏览器, 昨天我贴错了 ,今天 我也是完全按照视频中去做的 ,但是还是有问题! 我检查了很多遍
    2019-11-04 14:13:47
  • 芝芝兰兰 回复 提问者 LLLL_ #2
    同学你好,同学的意思是不是在没有登录的时候,访问“http://localhost:8080/FilterDemo/message.jsp”的时候弹不出alert呢?同学可以将代码全部复制粘贴出来看看,还有同学的项目目录截一下图呢~方便这边复现同学的问题呢~注意不要贴在回复中,会丧失代码格式,请以回答这个问题的方式贴入。祝学习愉快~
    2019-11-04 14:48:39
  • LLLL_ 提问者 回复 芝芝兰兰 #3
    我已经发起一个新的提问了 ,希望老师尽快回答 谢谢
    2019-11-04 15:05:51
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

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