LoginFilter 用于做用户请求资源时的登录校验,要求用户必须登录过才可以访问项目中的其他资源,如果没有登录,则控制跳转到login.html,代码写法
时间: 2024-04-06 08:30:29 浏览: 167
在 Java Web 中,可以通过 Filter 进行请求过滤和处理,实现类似拦截器的功能。LoginFilter 可以实现用户登录校验,以下是一个简单的示例代码:
```
public class LoginFilter implements Filter {
private String contextPath;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
contextPath = filterConfig.getServletContext().getContextPath();
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 判断用户是否已经登录
HttpSession session = request.getSession(false);
if (session == null || session.getAttribute("username") == null) {
// 未登录,重定向到登录页面
response.sendRedirect(contextPath + "/login.html");
return;
}
// 已登录,继续处理请求
filterChain.doFilter(request, response);
}
@Override
public void destroy() {
// do nothing
}
}
```
在这个示例代码中,我们通过实现 Filter 接口来实现 LoginFilter,其中 init() 方法用于初始化 Filter,doFilter() 方法用于处理请求,destroy() 方法用于销毁 Filter。
在 doFilter() 方法中,我们通过 HttpServletRequest 获取当前用户的 Session,判断用户是否已经登录。如果未登录,则通过 HttpServletResponse 实现重定向到登录页面;如果已登录,则通过 FilterChain 继续处理请求。需要注意的是,在重定向到登录页面时,应该使用相对路径或绝对路径,而不是相对于当前请求路径的相对路径,否则可能会导致重定向失败。
阅读全文