我的过滤器好像失效了 直接 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>
//////////////////////////////////////////////////0
收起
正在回答
1回答
同学你好。同学的意思是不是没有登录的时候,访问“http://localhost:8080/FilterDemo/message.jsp”的时候弹不出alert呢?将同学提供的这部分代码拼入老师的源码中,运行之后,是可以正常的跳转,并且弹出呢~

同学贴的是字符编码过滤器,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 {
}
}祝学习愉快~
2. 从网页搭建入门JavaWeb
- 参与学习 人
- 提交作业 676 份
- 解答问题 9666 个
本阶段将从前端网页搭建入手,到Java Web基础,前后端结合助你完成Java Web小白的蜕变!
了解课程
恭喜解决一个难题,获得1积分~
来为老师/同学的回答评分吧
0 星