扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
怎么在Java项目中利用servlet实现一个自动登录退出功能?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
创新互联建站长期为千余家客户提供的网站建设服务,团队从业经验10年,关注不同地域、不同群体,并针对不同对象提供差异化的产品和服务;打造开放共赢平台,与合作伙伴共同营造健康的互联网生态环境。为红寺堡企业提供专业的做网站、成都网站设计,红寺堡网站改版等技术服务。拥有10年丰富建站经验和众多成功案例,为您定制开发。
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.java public User login(User user){ try { return ud.login(user); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; }
UserServlet.java实现登录功能
//登录 public void login(HttpServletRequest request, HttpServletResponse response) throws IOException, IllegalAccessException, InvocationTargetException, ServletException{ Mapmap = 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/>@Override public 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")){//找到感兴趣的cookie username = cookie.getValue(); } if (cookie.getName().equals("password")){//找到感兴趣的cookie userpass = 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/>} @Override public void init(FilterConfig filterConfig) throws ServletException { // TODO Auto-generated method stubbr/>} @Override public void destroy() { // TODO Auto-generated method stub } }
前台:login.jsp此单选框被选中下次访问即为自动登录
<%@ page contentType="text/html;charset=UTF-8" language="java" %>系统首页 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 { %> 登录/注册 <% } %>登录 <% String msg = (String)request.getAttribute("msg"); %> <% if(msg != null){ out.print(msg); } %>
info.jsp
<%@ page contentType="text/html;charset=UTF-8" language="java" %>Title 主页内容
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-8 response.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步骤 //获取session HttpSession 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 { //退出系统 //获取session HttpSession session = request.getSession(); //删除session session.removeAttribute("loginUser"); //跳转到登录页面/首页 response.sendRedirect("index.jsp"); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doPost(request, response); } }
web.xml
index.jsp
看完上述内容,你们掌握怎么在Java项目中利用servlet实现一个自动登录退出功能的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注创新互联行业资讯频道,感谢各位的阅读!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流