Java使用过滤器实现登录拦截处理,可以基于Servlet的过滤器实现,这种方式可以在不改变原有代码的情况下实现权限控制等工作。具体操作步骤如下:
1.编写过滤器类
首先,需要编写一个类实现javax.servlet.Filter
接口,实现对请求的拦截,并在其doFilter()
方法中添加登录验证及权限控制等逻辑代码。示例代码如下:
import java.io.IOException;
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;
public class LoginFilter implements Filter {
public void init(FilterConfig filterConfig) throws ServletException {
// 过滤器初始化方法,可以在此处获取配置参数或初始化资源
}
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
HttpServletRequest request = (HttpServletRequest) servletRequest;
HttpServletResponse response = (HttpServletResponse) servletResponse;
// 判断用户是否已登录,未登录则重定向到登录页面
if(request.getSession().getAttribute("user") == null) {
response.sendRedirect(request.getContextPath() + "/login.jsp");
return;
}
// 判断用户权限是否足够,不足则给予提示或重定向到无权限页面
String uri = request.getRequestURI();
if(uri.contains("/admin/") && request.getSession().getAttribute("role") != "admin") {
response.sendRedirect(request.getContextPath() + "/no_permission.jsp");
return;
}
// 如果用户已登录并权限足够,则放行请求
filterChain.doFilter(servletRequest, servletResponse);
}
public void destroy() {
// 过滤器销毁方法,可以在此处释放资源
}
}
在上述代码中,我们实现了LoginFilter
类,实现了Filter
接口并重写了其init()
、doFilter()
和destroy()
方法。在doFilter()
方法中,我们首先获取到了当前请求的HttpServletRequest
和HttpServletResponse
对象,然后判断用户是否已登录,若未登录,则重定向到登录页面;随后判断用户的权限是否足够,若权限不足,则重定向到无权限页面;最后,如果用户已登录并权限足够,则放行请求。
2.配置web.xml
在过滤器类编写完成后,需要配置web.xml
文件,将其注册为过滤器。示例代码如下:
<filter>
<filter-name>LoginFilter</filter-name>
<filter-class>com.example.filter.LoginFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>LoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
在上述代码中,我们首先定义了一个名为LoginFilter
的过滤器,其类名为com.example.filter.LoginFilter
;然后在filter-mapping
标签中将过滤器与所有URL匹配上。这样,所有请求都会经过LoginFilter
过滤器进行登录验证及权限控制。
3.编写登录页面
实现了过滤器后,我们需要编写一个登录页面用于用户登录,示例代码如下:
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Login</title>
</head>
<body>
<h1>Login</h1>
<form action="${pageContext.request.contextPath}/login.do" method="post">
<p>Username: <input type="text" name="username"></p>
<p>Password: <input type="password" name="password"></p>
<p><input type="submit" value="Login"></p>
</form>
</body>
</html>
在上述代码中,我们定义了一个Html页面,包含一个表单,请求方式为POST,并指向了一个名为login.do
的Servlet。在Servlet中,我们可以将用户输入的用户名和密码与数据库中存储的数据进行比对,若一致,则将用户信息存入Session中,登录成功;否则提示用户输入的用户名或密码不正确。
4.编写Servlet
登录页面编写完成后,我们需要编写一个Servlet,用于接收用户登录信息,示例代码如下:
import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
// 根据用户名和密码查询数据库,验证用户信息是否正确
boolean isUserValid = checkUserValid(username, password);
if(isUserValid) {
// 用户信息正确,则将用户信息存入Session中,设置用户已登录,跳转至首页
HttpSession session = request.getSession();
session.setAttribute("user", username);
session.setAttribute("role", "admin"); // 也可以根据用户名从数据库中查询用户的角色
response.sendRedirect(request.getContextPath() + "/index.jsp");
} else {
// 用户信息不正确,则给予提示信息,并重定向回登录页面
request.setAttribute("errorMsg", "Invalid username or password");
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
private boolean checkUserValid(String username, String password) {
// 查询数据库,比对用户名和密码
return true; // 在此处应在数据库中查询用户信息,并比对用户名和密码,返回true或false
}
}
在上述代码中,我们定义了一个Servlet,用于接收前端页面传来的请求,获取用户名和密码,并与数据库存储的信息进行比对。若比对成功,则将用户信息存储到Session中,并跳转到首页;若比对失败,则给予相应的提示信息,并重定向回登录页面。
5.测试登录拦截功能
所有代码编写完成后,我们需要测试一下登录拦截的功能是否生效。首先,我们访问一个需要登录的页面,验证过滤器是否能够拦截未登录的用户并重定向到登录页面;然后,用正确的用户名和密码登录系统,验证过滤器能否正确放行登录用户的请求;最后,我们使用错误的用户名或密码登录系统,验证过滤器是否能够正确重定向到登录页面,并提示用户登录信息不正确。
以上就是Java使用过滤器实现登录拦截处理的完整攻略,其中包含了编写过滤器、配置web.xml、编写登录页面、编写Servlet和测试登录拦截功能等所有步骤。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java 使用过滤器实现登录拦截处理 - Python技术站