用Filter实现用户登录权限控制。(15分) 要求: (1)编写正确的Java代码,包名com.qst.filter,类名LoginFilter (2)使用session 进行用户数据的存储。 (3)编写正确的过滤器,如果登录放行否则调转到登录页面。
时间: 2024-03-22 20:40:06 浏览: 63
以下是代码实现:
```java
package com.qst.filter;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
public class LoginFilter implements Filter {
private FilterConfig filterConfig;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
this.filterConfig = filterConfig;
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse res = (HttpServletResponse) response;
HttpSession session = req.getSession();
String uri = req.getRequestURI();
if (uri.endsWith("login.jsp") || uri.endsWith("login.do") || uri.endsWith(".css") || uri.endsWith(".js") || uri.endsWith(".png") || uri.endsWith(".jpg")) {
chain.doFilter(request, response);
} else {
if (session.getAttribute("username") == null) {
res.sendRedirect(req.getContextPath() + "/login.jsp");
} else {
chain.doFilter(request, response);
}
}
}
@Override
public void destroy() {
this.filterConfig = null;
}
}
```
该过滤器的作用是,对于除了登录页面以外的所有请求,如果用户未登录,则自动跳转到登录页面。如果用户已经登录,则可以继续访问。在该过滤器中,我们使用了 session 来存储用户的登录信息。在登录成功后,我们可以将用户的信息存储到 session 中,在过滤器中判断 session 中是否存在该信息即可判断用户是否已经登录。需要注意的是,在过滤器中,我们需要排除一些不需要进行登录校验的请求,比如登录页面本身、静态资源等。
阅读全文