完成使用Filter实现用户自动登录任务代码的编写。
时间: 2024-02-23 14:00:23 浏览: 32
好的,下面是使用 Filter 实现用户自动登录的代码示例:
Filter代码:
```java
public class AutoLoginFilter implements Filter {
private String username;
private String password;
private String rememberMe;
@Override
public void init(FilterConfig filterConfig) throws ServletException {
// 读取配置文件中的用户名、密码和记住我选项
username = filterConfig.getInitParameter("username");
password = filterConfig.getInitParameter("password");
rememberMe = filterConfig.getInitParameter("rememberMe");
}
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
HttpSession session = req.getSession();
// 判断用户是否已经登录
if (session.getAttribute("user") == null) {
// 判断用户是否选择了记住我
Cookie[] cookies = req.getCookies();
String cookieUsername = null;
String cookiePassword = null;
String cookieRememberMe = null;
if (cookies != null) {
for (Cookie cookie : cookies) {
if (cookie.getName().equals("username")) {
cookieUsername = cookie.getValue();
}
if (cookie.getName().equals("password")) {
cookiePassword = cookie.getValue();
}
if (cookie.getName().equals("rememberMe")) {
cookieRememberMe = cookie.getValue();
}
}
}
if (username.equals(cookieUsername) && password.equals(cookiePassword) && "true".equals(cookieRememberMe)) {
// 用户已经选择了记住我并且Cookie中保存的用户名和密码与配置文件中的相同,将用户信息存入Session中
session.setAttribute("user", new User(username, password));
}
}
chain.doFilter(request, response);
}
@Override
public void destroy() {
}
}
```
使用方法:
1. 在 web.xml 文件中配置过滤器和过滤器参数:
```xml
<filter>
<filter-name>AutoLoginFilter</filter-name>
<filter-class>com.example.AutoLoginFilter</filter-class>
<init-param>
<param-name>username</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>password</param-name>
<param-value>admin</param-value>
</init-param>
<init-param>
<param-name>rememberMe</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>AutoLoginFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
```
2. 在登录页面中添加记住我选项,用户勾选后,将用户名、密码和记住我选项保存到 Cookie 中:
```java
if (rememberMe != null) {
Cookie usernameCookie = new Cookie("username", username);
usernameCookie.setMaxAge(60 * 60 * 24 * 7); // 保存一周
resp.addCookie(usernameCookie);
Cookie passwordCookie = new Cookie("password", password);
passwordCookie.setMaxAge(60 * 60 * 24 * 7); // 保存一周
resp.addCookie(passwordCookie);
Cookie rememberMeCookie = new Cookie("rememberMe", "true");
rememberMeCookie.setMaxAge(60 * 60 * 24 * 7); // 保存一周
resp.addCookie(rememberMeCookie);
}
```
注意:在实际开发中,为了安全起见,保存到 Cookie 中的密码应该进行加密处理。