dfsfd
第一步:准备页面
- <body>
- <h1>用户登录</h1><hr>
- <form action="${pageContext.request.contextPath }/servlet/LoginServlet" method="POST">
- 用户名<input type="text" name="name" />
- 密码<input type="password" name="password" />
- <input type="checkbox" name="autologin" value="true"/>30天内自动登陆
- <input type="submit" value="登录"/>
- </form>
- </body>
第二步:创建自己的MyServlet 来处理自动登录 spring controller同理
- public class MyServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- //1,登录校验
- //2,如果用户勾选过30天内自动登陆,发送自动登陆cookie
- if("true".equals(request.getParameter("autologin"))){
- Cookie autologinC = new Cookie("autologin",user.getName()+":"+user.getPassword());
- autologinC.setPath(request.getContextPath());
- autologinC.setMaxAge(3600*24*30);
- response.addCookie(autologinC);
- }
- //4.重定向到主页
- response.sendRedirect(request.getContextPath()+"/index.jsp");
- }
- }
- }
第三步:创建 自己的AutoLoginFilter过滤器
@Component()
public class AutologinFilter implements Filter {
private UserController userController;
@Override
public void destroy() {
// TODO Auto-generated method stub
}
@Override
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
try {
ApplicationContext ctx = new FileSystemXmlApplicationContext("classpath:spring-mvc.xml");
this.userController = ctx.getBean(UserController.class);
} catch (BeansException e) {
e.printStackTrace();
}
HttpServletRequest req = (HttpServletRequest) request;
HttpServletResponse resp = (HttpServletResponse) response;
//1.只有未登录的用户才能自动登陆
if(req.getSession(false)==null || req.getSession().getAttribute("user")==null){
//2.只有带了自动登陆cookie的用户才能自动登陆
Cookie [] cs = req.getCookies();
Cookie findC = null;
if(cs!=null){
for(Cookie c : cs){
if("autologin".equals(c.getName())){
findC = c;
break;
}
}
}
if(findC!=null){
//3.自动登录Cookie中保存的用户名密码都需要是正确的才能自动登陆
String loginname = findC.getValue().split(":")[0];
String password= findC.getValue().split(":")[1];
ModelMap model = new ModelMap();
SerializeObject serializeObject = userController.getLoginBeanInfoByParams(req, resp, model, loginname, password);
if(serializeObject != null){//如果登录成功,则返回主页面
if(ResultType.NORMAL == serializeObject.getStatus()){
request.getRequestDispatcher("user/login?loginname="+loginname+"&password="+password).forward(request, response);
}else{
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
}
}
//无论是否自动登陆,都放行资源
chain.doFilter(request, response);
}
request.getRequestDispatcher("/login.jsp").forward(request, response);
}
@Override
public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub
}
}
第三步: 注册过滤器
- <filter>
- <description>自动登陆过滤器</description>
- <filter-name>AutologinFilter</filter-name>
- <filter-class>com.itheima.filter.AutologinFilter</filter-class>
- </filter>
- <filter-mapping>
- <filter-name>AutologinFilter</filter-name>
- <url-pattern>/*</url-pattern>
- </filter-mapping>
扩展:注销功能
- public class LogoutServlet extends HttpServlet {
- public void doGet(HttpServletRequest request, HttpServletResponse response)
- throws ServletException, IOException {
- if(request.getSession(false)!=null){
- request.getSession().invalidate();
- //删除自动登录 cookie
- Cookie autologinC = new Cookie("autologin", "");
- autologinC.setPath(request.getContextPath());
- autologinC.setMaxAge(0);
- response.addCookie(autologinC);
- }
- response.sendRedirect(request.getContextPath()+"/index.jsp");
- }
- }