用Filter实现用户登录权限控制。(15分) 要求: (1)编写正确的Java代码,包名com.qst.filter,类名LoginFilter (2)使用session 进行用户数据的存储。 (3)编写正确的过滤器,如果登录放行否则调转到登录页面。
时间: 2024-02-22 22:59:11 浏览: 89
supHighlighter:支持qst荧光笔
好的,下面是Java代码的实现:
```
package com.qst.filter;
import javax.servlet.*;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
@WebFilter(filterName = "LoginFilter", urlPatterns = {"/*"})
public class LoginFilter implements Filter {
public void init(FilterConfig config) throws ServletException {
}
public void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain) throws ServletException, IOException {
HttpServletRequest request = (HttpServletRequest) req;
HttpServletResponse response = (HttpServletResponse) resp;
HttpSession session = request.getSession();
String uri = request.getRequestURI();
// 如果用户请求登录页面或者登录请求,则直接放行
if (uri.endsWith("login.jsp") || uri.endsWith("login.do")) {
chain.doFilter(request, response);
return;
}
// 如果用户已经登录,则也放行
if (session.getAttribute("user") != null) {
chain.doFilter(request, response);
return;
}
// 否则,重定向到登录页面
response.sendRedirect(request.getContextPath() + "/login.jsp");
return;
}
public void destroy() {
}
}
```
在上面的代码中,我们首先获取当前请求的URI,然后判断用户是否请求登录页面或者登录请求,如果是的话,直接放行;如果用户没有登录,则重定向到登录页面;否则,直接放行。在实现中,我们使用了`HttpSession`来存储用户的登录信息。需要注意的是,在实现中,我们使用了`@WebFilter`注解来标注过滤器,指定了过滤器的名称和URL模式。
阅读全文