版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/lin1094201572/article/details/82822553
CharacterEncodingFilter在web容器中的注册:
<!-- 处理请求编码过滤器 配置和servlet一样 -->
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>com.lin.linframework.sysmanage.filter.CharacterEncodingFilter</filter-class>
<!-- 配置初始化参数 -->
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<!-- 映射对应路径的java类 -->
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<!-- 匹配的servlet的别名 /* 表示对所有servlet起作用 /servlet表示对url-pattern 为servlet的起作用 -->
<url-pattern>/*</url-pattern>
</filter-mapping>
CharacterEncodingFilter的实现:
public class CharacterEncodingFilter implements Filter {
//初始化私有变量FilterConfig
private FilterConfig filterConfig;
@Override
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
System.out.println("filter....创建");
}
//ServletRequest 为HttpServletRequest 父类 重写子类重写
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//得到是配置在xml中的filter-param中的encoding值为UTF-8
String encoding = filterConfig.getInitParameter("encoding");
if(null != encoding && !encoding.equals("")){
request.setCharacterEncoding(encoding);
response.setCharacterEncoding(encoding);
response.setContentType("text/html;charset=" + encoding);
}
System.out.println("filter....等待处理..");
//把请求和响应继续带到下一个filter,如果没有就进入请求的servlet(下一步) 当前页所要跳转的页面
chain.doFilter(request,response);
}
@Override
public void destroy() {
}
}
后端页面过滤器PageFilter,即登入验证,在web容器中注册:
<!-- 过滤未登入请求后台 -->
<filter>
<description>未登入页面请求拦截</description>
<filter-name>pagesFilter</filter-name>
<filter-class>com.lin.linframework.sysmanage.filter.PagesFilter</filter-class>
</filter>
<!-- 映射对应filter类 注意url-pattern 所有后台页面-->
<filter-mapping>
<filter-name>pagesFilter</filter-name>
<url-pattern>/pages/*</url-pattern>
</filter-mapping>
PageFilter的实现:
public class PagesFilter implements Filter {
private FilterConfig filterConfig;
@Override
public void init(FilterConfig config) throws ServletException {
this.filterConfig = config;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
//得到httpservletrequest 只有子类HttpServlet 有getSession方法
HttpServletRequest httpServletRequest = (HttpServletRequest) request;
HttpServletResponse httpServletReponse = (HttpServletResponse) response;
//得到session对象中设置的值
String username = (String) httpServletRequest.getSession().getAttribute("userName");
if( !StringUtils.isEmpty(username)){
System.out.println("通过session验证.........");
chain.doFilter(request, response);
}else{
System.out.println("未通过session验证........返回登入页面.....");
//重定向路径 上一级 下的index.html
httpServletReponse.sendRedirect("../login.jsp");
}
}
@Override
public void destroy() {
}
}