两个过滤:第一个能过滤URL地址栏上下文后以mgr开头的页面,第二个能滤上下文后面的所有页面也就是根目录下的所有页面
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version="3.0">
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/mgr/*</url-pattern>
<!-- 只过滤/mgr/*的页面,URL以/mgr/开头的页面,一般login.jsp,regist.jsp,首页不需要过滤-->
</filter-mapping>
<filter>
<filter-name>Fileter</filter-name>
<filter-class>com.filter.Fileter</filter-class>
<!-- 增加程序的扩展性,只要改一处utf-8,类里全部就改了,省的多次修改-->
<init-param>
<param-name>charset</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>Fileter</filter-name>
<url-pattern>/* </url-pattern>
<!-- *代表那个请求能进入过滤器-->
<!-- /* 上下文后写任意路径都能够先通过过滤器,先走过滤器后走servlet-->
</filter-mapping>
</web-app>
Fileter改编码格式
package com.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class Fileter implements Filter {
private String charset;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
charset = filterConfig.getInitParameter("charset");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)servletRequest;
req.setCharacterEncoding(charset);
filterChain.doFilter(req,servletResponse);//filterChain.doFilter让程序继续向下执行
}
}
LoginFilter如果没有登陆就访问功能页面(如写文章)就会自动跳转到登录页面进行登录
package com.filter;
import com.blog.util.Key;
import com.pojo.User;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class LoginFilter implements Filter {
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest req=(HttpServletRequest)servletRequest;
HttpServletResponse resp=(HttpServletResponse)servletResponse;
//从session中获取对象,如果有继续提交文章,如果没有就重新跳转到登录页面
HttpSession session=req.getSession();
User user=(User) session.getAttribute(Key.SISSION_USER);
if(user!=null){
filterChain.doFilter(req,resp);
}else{
// 转发:服务器之间的操作浏览器不参与并且地址不变
// 重定向:浏览器之间的跳转,地址栏改变所以要重新获取上下文
String context=req.getContextPath();
resp.sendRedirect(context+"/login.jsp");
}
}
}
评论列表( 0 )