Java中怎么利用servlet实现自动登录退出功能
创始人
2024-12-23 14:43:42
0次

UserDao.java从数据库中查询用户名与密码

//登录public User login(User user) throws SQLException {QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());String sql = "select from user where username = ? and password = ?";return qr.query(sql, new BeanHandler(User.class),user.getUsername(),user.getPassword());}UserService.javapublic User login(User user){try {return ud.login(user);} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}return null;}

UserServlet.java实现登录功能

//登录public void login(HttpServletRequest request,HttpServletResponse response) throws IOException, IllegalAccessException, InvocationTargetException, ServletException{Map map = request.getParameterMap();User user = new User();BeanUtils.populate(user,map);if (map.get("autoLogin")!=null){Cookie username = new Cookie("username", map.get("username")[0]);username.setMaxAge(6060);Cookie password = new Cookie("password", map.get("password")[0]);password.setMaxAge(60*60);response.addCookie(username);response.addCookie(password);}user = us.login(user);if (user != null){request.getSession().setAttribute("user", user);response.sendRedirect("/ShopStore/default.jsp");}else{request.setAttribute("message", "用户或密码错误!");request.getRequestDispatcher("/login.jsp").forward(request, response);}}

工具类:AutoLoginFilter.java用来实现自动登录

package com.yinhe.web.filter;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.Cookie;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import com.yinhe.bean.User;import com.yinhe.service.UserService;public class AutoLoginFilter implements Filter{br/>@Overridepublic void doFilter(ServletRequest request, ServletResponse response,FilterChain chain) throws IOException, ServletException {HttpServletRequest req = (HttpServletRequest)request;HttpServletResponse resp = (HttpServletResponse)response;//是否已登录if (req.getSession().getAttribute("user") == null){//如果已登录,则啥都不干//判断cookie中有没有账户密码Cookie[] cookies = req.getCookies();if (cookies != null){String username = "";String userpass = "";for (Cookie cookie : cookies) {if (cookie.getName().equals("username")){//找到感兴趣的cookieusername = cookie.getValue();}if (cookie.getName().equals("password")){//找到感兴趣的cookieuserpass = cookie.getValue();}}UserService us = new UserService();User user = new User();user.setUsername(username);user.setPassword(userpass);if (us.login(user) != null){req.getSession().setAttribute("user", user);}}}chain.doFilter(request, response);br/>}@Overridepublic void init(FilterConfig filterConfig) throws ServletException {// TODO Auto-generated method stubbr/>}@Overridepublic void destroy() {// TODO Auto-generated method stub}}

前台:login.jsp此单选框被选中下次访问即为自动登录

 

<%@ page contentType="text/html;charset=UTF-8" language="java" %>系统首页

<%-- 不推荐使用<%String loginUser = (String) request.getAttribute("loginUser");if (loginUser != null){out.println(loginUser);}else {%>登录/注册<%}%>--%><%String loginUser = (String) session.getAttribute("loginUser");if (loginUser != null){out.println(loginUser);out.println("退出");}else {%>登录/注册<%}%>

主页内容

Python——画一棵漂亮的樱花树(不同种樱花+玫瑰+圣诞树喔)

login.jsp<%@ page contentType="text/html;charset=UTF-8" language="java" %>登录<%String msg = (String)request.getAttribute("msg");%><%if(msg != null){out.print(msg);}%>

登录

账号:
密码:

info.jsp

<%@ page contentType="text/html;charset=UTF-8" language="java" %>Title

<%String loginUser = (String) session.getAttribute("loginUser");if (loginUser != null){out.println(loginUser);out.println("退出");}else {%>登录/注册<%}%>

主页内容

Servlet02.java

import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;br/>@WebServlet("/myServlet02")public class Servlet02 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//修改编码request.setCharacterEncoding("utf-8");//请求过来的编码是亨达返佣www.kaifx.cn/broker/hantecglobal.htmlutf-8response.setContentType("text/html;charset=utf-8");//响应出去的内容,为网页编码utf-8//获取表单数据String username = request.getParameter("username");String password = request.getParameter("password");//验证if("aaa".equals(username) && "123".equals(password)){//跳转(请求转发 请求重定向)//重定向:两次请求,不能在request作用域中共享数据。//如果要在两次请求或多次请求之间,进行数据共享,需要用session//使用session步骤//获取sessionHttpSession session = request.getSession();//如果存在已有的session,则直接返回,否则会创建一个新的,返回。//HttpSession session = request.getSession(true);//同上//HttpSession session = request.getSession(false);//如果存在已有的session,则直接返回,否则返回null。//在session的作用域保存数据,供后续请求使用session.setAttribute("loginUser",username);response.sendRedirect("index.jsp");/ 多个页面不推荐使用请求转发request.setAttribute("loginUser",username);request.getRequestDispatcher("index.jsp").forward(request,response);/}else {//转发:一次请求,可以在request作用域中,共享数据request.setAttribute("msg","");// response.sendRedirect("login.jsp");request.getRequestDispatcher("login.jsp").forward(request,response);}}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}}

LogoutServlet.java

import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;import javax.servlet.http.HttpSession;import java.io.IOException;br/>@WebServlet("/logoutServlet")public class LogoutServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//退出系统//获取sessionHttpSession session = request.getSession();//删除sessionsession.removeAttribute("loginUser");//跳转到登录页面/首页response.sendRedirect("index.jsp");}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {doPost(request, response);}}

web.xml

index.jsp

相关内容

热门资讯

空调连续工作多久需要停机休息 空调连续工作的时间取决于多个因素,包括空调的型号、功率、使用环境和维护情况等。一般来说,空调可以连续...
空调哪个符号是除湿的 空调除湿功能通常用一个水滴形状的符号表示。不同品牌和型号的空调遥控器可能会有所差异,但一般来说,除湿...
格力空调多长时间加一次氟利昂 1、一般情况下,空调对氟利昂的使用量是非常小的,所以在空调使用了四年左右的时候再考虑加也没问题。2、...
空调用多长时间需要加氟一次 一般情况下是五年。当出现以下这几种情况时,空调才需要加氟。1、空调的室内机和室外机各有两个接口,当接...
格调生活·C标思享荟:卡萨帝在... 9月12日的郑州龙湖金融岛,夜风轻拂,灯光璀璨。“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑...
品牌价值破千亿、高端份额持续领... 9月12日,“C标时刻共传奇——卡萨帝思享荟暨20周年品牌盛典郑州站”在郑州龙湖金融岛举办。2026...
空调主板坏了修800还是换新的 空调主板坏了是修还是换新,需要考虑多个因素,以下是一些建议:1. 维修成本:如果维修费用较低,比如 ...
空调开多久需要休息多长时间 问题:空调开多久需要休息多长时间回答:1、在使用空调的过程中,一般空调开7~8个小时左右需要休息2~...
中央空调多长时间清洗一次 1、一般空调开机前清洗一次即可,空调开机中间时段再清洗一次,空调关机时清洗一次,这样比较合理。2、空...
中央空调氟利昂多久加一次 看空调制热和制冷程度,很多人的观点认为氟利昂必须一年放一次,其实这个观点是错误的,理解上面有点偏差,...