使用Java servlet实现自动登录退出功能

网友投稿 314 2022-12-23


使用Java servlet实现自动登录退出功能

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{

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/>@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此单选框被选中下次访问即为自动登录

type="checkbox" > 记住用户名

type="checkbox" > 记住用户名

<%@ 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" %>

<%

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");//请求过来的编码是亨达返佣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

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

version="3.1">

index.jsp

xmlns:xsi="http://w3.org/2001/XMLSchema-instance"

xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"

version="3.1">

index.jsp

总结


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Java 反射机制原理与用法详解
下一篇:SpringBoot使用token简单鉴权的具体实现方法
相关文章

 发表评论

暂时没有评论,来抢沙发吧~