public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException { HttpServletRequest req = (HttpServletRequest) servletRequest; servletRequest.setCharacterEncoding("utf-8"); servletResponse.setCharacterEncoding("utf-8"); servletResponse.setContentType("text/html;charset=utf-8"); // 得到用户请求的URI // 得到web应用程序的上下文路径 // 去除上下文路径,得到剩余部分的路径 String uri = req.getRequestURI().substring(req.getContextPath().length());//请求的页面 String url=req.getHeader("referer");//之前的页面 if(req.getSession().getAttribute("patient")==null&&patient.contains(uri)){ req.getSession().setAttribute("message","请先登录!"); req.getSession().setAttribute("url",url); // System.out.println(req.getSession().getAttribute("url")); HttpServletResponse resp= (HttpServletResponse) servletResponse; resp.sendRedirect("login.jsp"); }else { filterChain.doFilter(servletRequest, servletResponse); } }
时间: 2024-02-07 08:02:20 浏览: 29
这个过滤器的 doFilter() 方法是过滤器的核心方法,用于对请求进行过滤和拦截。该方法接收一个 ServletRequest 对象、一个 ServletResponse 对象和一个 FilterChain 对象作为参数。
在该方法中,首先将 ServletRequest 对象强制转换为 HttpServletRequest 对象,然后设置请求和响应的字符编码为 utf-8,并设置响应的内容类型为 text/html;charset=utf-8,以保证中文字符能够正确显示。
接着,通过 HttpServletRequest 对象获取用户请求的 URI,并去除上下文路径,得到剩余部分的路径。然后,通过 HttpServletRequest 对象获取请求头中的 referer 字段,即之前的页面。
接下来,进行判断:如果用户未登录且请求的 URI 在 patient 列表中,则将一个提示信息和之前的页面的 URL 存放在 HttpSession 对象中,并进行页面的重定向,跳转到登录页面(login.jsp);否则,将请求和响应对象传递给 FilterChain 对象的 doFilter() 方法,继续执行后续的过滤器。
相关问题
编写一个字符集过滤器,解决表单POST方式提交的中文乱码。要求: 1)、可以配置某种字符集,如UTF-8或GBK;(7分) 2)、在web.xml中写出过滤器的配置片段。(8分) Web.xml中的配置: package com.kzw.filter; public class CharSetFilter implements Filter { private String encoding; //定义字符集变量 public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws IOException, ServletException { } public void init(FilterConfig config) throws ServletException { } public void destroy() { } }
好的,根据你的要求,我来回答你的问题。
以下是一个基本的字符集过滤器示例,可以解决表单POST方式提交的中文乱码问题:
```
package com.kzw.filter;
import javax.servlet.*;
import javax.servlet.http.HttpServletRequest;
import java.io.IOException;
public class CharSetFilter implements Filter {
private String encoding;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
encoding = filterConfig.getInitParameter("encoding");
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
if ("POST".equalsIgnoreCase(request.getMethod())) {
request.setCharacterEncoding(encoding);
}
filterChain.doFilter(servletRequest, servletResponse);
}
@Override
public void destroy() {
encoding = null;
}
}
```
在web.xml中可以添加以下配置片段:
```
<filter>
<filter-name>CharSetFilter</filter-name>
<filter-class>com.kzw.filter.CharSetFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CharSetFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
这里我们将字符集设置为UTF-8,你可以根据需要进行更改。在上述配置中,我们将过滤器映射到了所有的URL上,这意味着所有的请求都会经过CharSetFilter。
解释一下 public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { HttpServletRequest req =(HttpServletRequest) request; HttpServletResponse resp =(HttpServletResponse) response; HttpSession session = req.getSession(); User user =(User) session.getAttribute("user"); String uri= req.getRequestURI(); if(user==null&&!uri.endsWith("login")&&!uri.endsWith("login.jsp")) { String path = req.getServletContext().getContextPath(); System.out.println(path); resp.sendRedirect(path+"/client/login.jsp"); } else{ chain.doFilter(request, response); } }
这段代码是一个 Java Web 应用程序中的过滤器,用于过滤客户端请求。在客户端请求被处理之前,它会拦截请求并检查当前用户是否已经登录。如果用户未登录,则会将请求重定向到登录页面。否则,请求将继续被处理,直到响应返回给客户端。具体来说,代码中的 doFilter 方法会获取当前请求的 HttpServletRequest 和 HttpServletResponse 对象,然后从 HttpServletRequest 对象中获取 HttpSession 对象和当前登录的用户信息。如果用户未登录且请求不是登录页面或登录请求,则将请求重定向到登录页面。否则,将请求和响应对象传递给 FilterChain 对象的 doFilter 方法,以便继续处理该请求。