使用Filter实现自动登录
来源:互联网 发布:淘宝是p2p技术 编辑:程序博客网 时间:2024/05/10 13:24
参考CSDN的下次自动登录,使用Filter实现自动登录的操作。
过滤器:
*/@WebFilter(value="/login.jsp")public class AutoLoginFilter implements Filter { /** * Default constructor. */ public AutoLoginFilter() { // TODO Auto-generated constructor stub } /** * @see Filter#destroy() */ public void destroy() { // TODO Auto-generated method stub } /** * @see Filter#doFilter(ServletRequest, ServletResponse, FilterChain) */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { //强制转换为Http的请求和响应 HttpServletRequest req=(HttpServletRequest) request; HttpServletResponse rep=(HttpServletResponse) response; //验证是否登录 if(req.getSession().getAttribute("user")==null){ //从Cookie获取上次保存的账号和密码 Cookie[] cks=req.getCookies(); User user=null; for(Cookie c:cks){ if(c.getName().equals("user")){ String[] us=c.getValue().split("@"); user=new User(); user.setUsername(us[0]); user.setPass(us[1]); break; } } //如果存储Cookie,那么就实现自动登录 if(user!=null){//需要自动登录 // 登录校验 User user1 = DbHelper.querySingle("select * from tb_user where username=?", User.class, user.getUsername()); boolean res=true; if (user1 != null) { if (user.getPass().equals(user1.getPass())) { req.getSession().setAttribute("user", user); res=false; rep.sendRedirect(req.getServletContext().getContextPath()+"/success.jsp"); } } if(res){//登录失败,之前的记录账号和密码错误 Cookie ck=new Cookie("user",""); ck.setPath("/"); ck.setMaxAge(0); rep.addCookie(ck); rep.sendRedirect(req.getServletContext().getContextPath()+"/login.jsp"); } } else{//直接登录页面 chain.doFilter(request, response); } } else{//如果已经登录,那么就直接放行 rep.sendRedirect("success.jsp"); } } /** * @see Filter#init(FilterConfig) */ public void init(FilterConfig fConfig) throws ServletException { // TODO Auto-generated method stub }}
登录的Servlet
@WebServlet("/userlogin")public class LoginServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LoginServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { System.out.println("进行登录"); String msg = "账号或密码错误"; String u = request.getParameter("un"); String p = request.getParameter("pw"); String al = request.getParameter("autologin"); // 请求来自登录页面 if (StringUtils.checkEmpty(u, p)) { // 登录校验 User user = DbHelper.querySingle("select * from tb_user where username=?", User.class, u); if (user != null) { if (p.equals(user.getPass())) { //登录成功将用户信息存储到Session中 request.getSession().setAttribute("user", user); // 如果选择了自动登录,那么需要添加到Cookie if (al != null && al.equals("1")) { Cookie cookie = new Cookie("user", u + "@" + p); cookie.setPath("/"); cookie.setMaxAge(30 * 24 * 60 * 60); response.addCookie(cookie); } msg = ""; } } } if (msg.length() > 0) { request.setAttribute("msg", msg); request.getRequestDispatcher("login.jsp").forward(request, response); } else { response.sendRedirect("success.jsp"); } }}
注销的Servlet
@WebServlet("/loginout")public class LoginOutServlet extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public LoginOutServlet() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse * response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { request.getSession().removeAttribute("user"); // 点击注销之后,默认取消自动登录 //点击注销,让Cookie失效 Cookie ck=new Cookie("user",""); ck.setPath("/"); ck.setMaxAge(0); response.addCookie(ck); response.sendRedirect("success.jsp"); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse * response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doGet(request, response); }}
登录页面:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>账号登录</title><style type="text/css">#dv1{border: 1px solid #D5DCE5;}.t_1{border: 1px solid #38A9D3;width: 80%;font-size: 20px;}.btn_1{background-color: #C90A16;color: white;width: 80%;font-size: 25px;}</style></head><body><form action="userlogin" method="post"><table width="90%" align="center"><tr><td width="60%" align="right"><img src="https://csdnimg.cn/passport/login-banner.png" style="margin-top: 40px;margin-right: 20px" height="400px"/></td><td><div id="dv1" style="margin-top: 40px;"><table width="100%" height="400px" cellspacing="20px"><tr><td align="center"><p style="color: red" >${msg }</p></td></tr><tr><td><h2>账号登录<h2></td></tr><tr><td align="center"><input name="un" class="t_1"/></td></tr><tr><td align="center"><input name="pw" type="password" class="t_1"/></td></tr><tr><td><input name="autologin" value="1" style="margin-left: 40px" type="checkbox"/>下次自动登录</td></tr><tr><td align="center"><input type="submit" class="btn_1" value="登录"/></td></tr></table></div></td></tr></table></form></body></html>
主页:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"><title>恭喜你</title><style type="text/css">body { background: url("t.PNG");}</style></head><body><p style="margin-top: -5px"><a href="login.jsp">登录</a>|欢迎:${user.username }|<a href="loginout">注销</a></p></body></html>
阅读全文
0 0
- 使用Filter实现自动登录
- Filter 实现自动登录
- Filter过滤器实现自动登录
- Filter过滤器实现自动登录
- 使用cookie,session,filter等技术实现用户自动登录
- cookie加密解密全过程,使用filter实现自动登录
- 有关filter实现网站自动登录
- filter 过滤器实现自动登录功能
- 利用Filter实现用户自动登录
- filter完成自动登录的代码实现
- 原生自动登录(filter和cookie实现)
- Filter过滤器+cookie实现自动登录和安全登录
- Filter实现自动用户自动登录功能(三)
- Filter----自动登录
- 使用cookie+Filter实现单点登录
- 使用filter过滤器实现用户登录验证
- 有关采用Filter:实现网站自动登录功能模块
- 有关采用Filter:实现网站自动登录功能模块
- Could not read symbols解决方法
- ios-category解析
- linux中的定时任务crontab认识
- 下载旧版本android sdk tools
- 面试相关
- 使用Filter实现自动登录
- oracle外键关联而无法删除数据
- JDBC、mybatis和Hibernate比较
- 使用chrony代替ntp同步时间
- 微软C# 8.0中的四个特性
- 助焊剂各成分作用浅析
- 「python」UnicodeEncodeError: 'ascii' codec can't encode characters in position 14-17: ordinal not in
- mysql sql语句的基本用法
- TLS/SSL 协议详解(14) server hello done