public class LoginFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // 获得在下面代码中要用的request,response,session对象 HttpServletRequest servletRequest = (HttpServletRequest) request; HttpServletResponse servletResponse = (HttpServletResponse) response; HttpSession session = servletRequest.getSession(); // 获得用户请求的URI String path = servletRequest.getRequestURI(); // System.out.println(path); // 从session里取员信息 String admin = (String) session.getAttribute("admin"); //创建类Constants.java,里面写的是无需过滤的页面 for (int i = 0; i < Constant.NoFilter_Pages.length; i++) { if (path.indexOf(Constant.NoFilter_Pages[i]) > -1) { chain.doFilter(servletRequest, servletResponse); return; } } // 登陆页面无需过滤 if (path.indexOf("/backLoginPage.do") > -1) { chain.doFilter(servletRequest, servletResponse); return; } if (path.indexOf("/backLogin.do.do") > -1) { chain.doFilter(servletRequest, servletResponse); return; }解释这段代码
时间: 2024-01-26 08:02:48 浏览: 76
这段代码是一个 Java Web 应用程序中的过滤器,用于过滤用户的请求。程序首先获取用户请求的 URI,然后从会话中获取管理员信息。接下来,程序会遍历 `Constant.NoFilter_Pages` 数组,该数组包含了不需要过滤的页面的 URI。如果用户请求的 URI 与 `NoFilter_Pages` 数组中的任何一个 URI 匹配,则直接通过过滤器,否则,将请求和响应对象传递给 FilterChain 进行链式处理。
需要注意的是,这段代码中还添加了一些特定的 URI 的判断,例如:
- 如果用户请求的 URI 包含 `/backLoginPage.do`,则无需过滤,直接通过过滤器;
- 如果用户请求的 URI 包含 `/backLogin.do`,则无需过滤,直接通过过滤器。
这些特定的 URI 判断可以根据实际情况进行修改和补充。
相关问题
package com; import java.io.IOException; import javax.servlet.*; public class MyFilter implements Filter{ // 字符编码 private String encoding; public MyFilter() { // TODO Auto-generated constructor stub } @Override public void destroy() { // TODO Auto-generated method stub } @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stub // 获取字符编码 encoding = filterConfig.getInitParameter("encoding"); } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // TODO Auto-generated method stub // 判断字符编码是否有效 if (encoding != null) { // 设置request字符编码 request.setCharacterEncoding(encoding); // 设置response字符编码 response.setContentType("text/html; charset="+encoding); } chain.doFilter(request, response); } }
这是一个 Java 代码段,它定义了一个名为 MyFilter 的过滤器,实现了 Filter 接口。它包含三个方法:destroy()、init(FilterConfig filterConfig) 和 doFilter()。在 init() 方法中,它获取了一个名为 encoding 的初始化参数,并将其存储在一个成员变量中。在 doFilter() 方法中,它检查 encoding 是否为 null,如果不为 null,则设置 request 和 response 的字符编码为该值。最后,它调用了 FilterChain 中的 doFilter() 方法,继续处理请求。
public class BaseFilter implements Filter { @Override public void init(FilterConfig filterConfig) throws ServletException { // 初始化 } @Override public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; String requestURI = httpRequest.getRequestURI(); if (requestURI.endsWith("load.jsp") || requestURI.endsWith("load.action")) { // 如果是load.jsp或load.action请求,则直接放行 chain.doFilter(request, response); return; } HttpSession session = httpRequest.getSession(false); if (session != null && session.getAttribute("user") != null) { // 如果已经登录,则放行请求 chain.doFilter(request, response); return; } // 否则跳转到登录页面 httpResponse.sendRedirect("/load.jsp"); } @Override public void destroy() { // 销毁 } }补全代码
这段代码是一个基础的过滤器实现,用于过滤所有的请求,检查用户是否已经登录,如果没有登录则跳转到登录页面。
完整的代码如下:
```
public class BaseFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 初始化
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
throws IOException, ServletException {
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
String requestURI = httpRequest.getRequestURI();
if (requestURI.endsWith("load.jsp") || requestURI.endsWith("load.action")) {
// 如果是load.jsp或load.action请求,则直接放行
chain.doFilter(request, response);
return;
}
HttpSession session = httpRequest.getSession(false);
if (session != null && session.getAttribute("user") != null) {
// 如果已经登录,则放行请求
chain.doFilter(request, response);
return;
}
// 否则跳转到登录页面
httpResponse.sendRedirect("/load.jsp");
}
@Override
public void destroy() {
// 销毁
}
}
```
阅读全文
相关推荐















