SSM实现登陆登出

2023-10-06 12:01
文章标签 实现 ssm 登陆 登出

本文主要是介绍SSM实现登陆登出,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

第一步:

 

在springmvc.xml配置文件里面配置一个拦截器的配置

<mvc:interceptors><mvc:interceptor><mvc:mapping path="/*/**"/><mvc:exclude-mapping path="/static/**"/>  <bean class="com.lpy.interceptor.LoginInterceptor"><property name="unCheckUrls"> <list> <value>/users/login.action</value></list> </property> </bean></mvc:interceptor></mvc:interceptors>

表示拦截所有路径,除了静态资源的路径

配置了一个拦截器LoginInterceptor,/users/login.action表示不进行拦截

第二步:

书写一个拦截器的类 并实现 HandlerInterceptor

package com.imooc.interceptor;import java.util.List;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;public class LoginInterceptor implements HandlerInterceptor {private List<String> unCheckUrls;@Overridepublic boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {String requestUrl = request.getRequestURI();requestUrl=requestUrl.replaceAll(request.getContextPath(), "");// 判断是否针对匿名路径需要拦截,如果包含,则表示匿名路径,需要拦截,否则通过拦截器if (unCheckUrls.contains(requestUrl)){// 包含公开url,直接跳过return true;}if(null == request.getSession().getAttribute("sessionUser")){response.sendRedirect(request.getContextPath()+"/users/login.action"); return false;}// 放行return true;}@Overridepublic void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)throws Exception {// TODO Auto-generated method stub}@Overridepublic void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)throws Exception {// TODO Auto-generated method stub}public List<String> getUnCheckUrls() {return unCheckUrls;}public void setUnCheckUrls(List<String> unCheckUrls) {this.unCheckUrls = unCheckUrls;}}

第三步:书写usersController 

package com.imooc.controller;import java.util.UUID;import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;import com.imooc.bean.AdminUser;
import com.imooc.pojo.Users;
import com.imooc.service.UsersService;
import com.imooc.utils.IMoocJSONResult;
import com.imooc.utils.PagedResult;@Controller
@RequestMapping("users")
public class UsersController {@Autowiredprivate UsersService usersService;@GetMapping("/showList")public String showList() {return "users/usersList";}@PostMapping("/list")@ResponseBodypublic PagedResult list(Users user , Integer page) {PagedResult result = usersService.queryUsers(user, page == null ? 1 : page, 10);return result;}@GetMapping("/login")public String login() {return "login";}@PostMapping("login")@ResponseBodypublic IMoocJSONResult userLogin(String username, String password,HttpServletRequest request, HttpServletResponse response) {// TODO 模拟登陆if (StringUtils.isBlank(username) || StringUtils.isBlank(password)) {return IMoocJSONResult.errorMap("用户名和密码不能为空");} else if (username.equals("lee") && password.equals("lee")) {String token = UUID.randomUUID().toString();AdminUser user = new AdminUser(username, password, token);request.getSession().setAttribute("sessionUser", user);return IMoocJSONResult.ok();}return IMoocJSONResult.errorMsg("登陆失败,请重试...");}@GetMapping("/logout")public String logout(HttpServletRequest request, HttpServletResponse response) {request.getSession().removeAttribute("sessionUser");return "login";}}

 

书写UsersController涉及到2个帮助类

第一个:获取的数据封装后返回前端的

package com.imooc.utils;/*** @Description: 自定义响应数据结构* 				这个类是提供给门户,ios,安卓,微信商城用的* 				门户接受此类数据后需要使用本类的方法转换成对于的数据类型格式(类,或者list)* 				其他自行处理* 				200:表示成功* 				500:表示错误,错误信息在msg字段中* 				501:bean验证错误,不管多少个错误都以map形式返回* 				502:拦截器拦截到用户token出错* 				555:异常抛出信息*/
public class IMoocJSONResult {// 响应业务状态private Integer status;// 响应消息private String msg;// 响应中的数据private Object data;private String ok;	// 不使用public static IMoocJSONResult build(Integer status, String msg, Object data) {return new IMoocJSONResult(status, msg, data);}public static IMoocJSONResult ok(Object data) {return new IMoocJSONResult(data);}public static IMoocJSONResult ok() {return new IMoocJSONResult(null);}public static IMoocJSONResult errorMsg(String msg) {return new IMoocJSONResult(500, msg, null);}public static IMoocJSONResult errorMap(Object data) {return new IMoocJSONResult(501, "error", data);}public static IMoocJSONResult errorTokenMsg(String msg) {return new IMoocJSONResult(502, msg, null);}public static IMoocJSONResult errorException(String msg) {return new IMoocJSONResult(555, msg, null);}public IMoocJSONResult() {}public IMoocJSONResult(Integer status, String msg, Object data) {this.status = status;this.msg = msg;this.data = data;}public IMoocJSONResult(Object data) {this.status = 200;this.msg = "OK";this.data = data;}public Boolean isOK() {return this.status == 200;}public Integer getStatus() {return status;}public void setStatus(Integer status) {this.status = status;}public String getMsg() {return msg;}public void setMsg(String msg) {this.msg = msg;}public Object getData() {return data;}public void setData(Object data) {this.data = data;}public String getOk() {return ok;}public void setOk(String ok) {this.ok = ok;}}

 

第二个:分页的帮助类

package com.lpy.utils;import java.util.List;/*** @Description: 封装分页后的数据格式*/
public class PagedResult {private int page;			// 当前页数private int total;			// 总页数	private long records;		// 总记录数private List<?> rows;		// 每行显示的内容public int getPage() {return page;}public void setPage(int page) {this.page = page;}public int getTotal() {return total;}public void setTotal(int total) {this.total = total;}public long getRecords() {return records;}public void setRecords(long records) {this.records = records;}public List<?> getRows() {return rows;}public void setRows(List<?> rows) {this.rows = rows;}}

 

这篇关于SSM实现登陆登出的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/152998

相关文章

使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)

《使用Java解析JSON数据并提取特定字段的实现步骤(以提取mailNo为例)》在现代软件开发中,处理JSON数据是一项非常常见的任务,无论是从API接口获取数据,还是将数据存储为JSON格式,解析... 目录1. 背景介绍1.1 jsON简介1.2 实际案例2. 准备工作2.1 环境搭建2.1.1 添加

Java实现任务管理器性能网络监控数据的方法详解

《Java实现任务管理器性能网络监控数据的方法详解》在现代操作系统中,任务管理器是一个非常重要的工具,用于监控和管理计算机的运行状态,包括CPU使用率、内存占用等,对于开发者和系统管理员来说,了解这些... 目录引言一、背景知识二、准备工作1. Maven依赖2. Gradle依赖三、代码实现四、代码详解五

java如何分布式锁实现和选型

《java如何分布式锁实现和选型》文章介绍了分布式锁的重要性以及在分布式系统中常见的问题和需求,它详细阐述了如何使用分布式锁来确保数据的一致性和系统的高可用性,文章还提供了基于数据库、Redis和Zo... 目录引言:分布式锁的重要性与分布式系统中的常见问题和需求分布式锁的重要性分布式系统中常见的问题和需求

SpringBoot基于MyBatis-Plus实现Lambda Query查询的示例代码

《SpringBoot基于MyBatis-Plus实现LambdaQuery查询的示例代码》MyBatis-Plus是MyBatis的增强工具,简化了数据库操作,并提高了开发效率,它提供了多种查询方... 目录引言基础环境配置依赖配置(Maven)application.yml 配置表结构设计demo_st

python使用watchdog实现文件资源监控

《python使用watchdog实现文件资源监控》watchdog支持跨平台文件资源监控,可以检测指定文件夹下文件及文件夹变动,下面我们来看看Python如何使用watchdog实现文件资源监控吧... python文件监控库watchdogs简介随着Python在各种应用领域中的广泛使用,其生态环境也

el-select下拉选择缓存的实现

《el-select下拉选择缓存的实现》本文主要介绍了在使用el-select实现下拉选择缓存时遇到的问题及解决方案,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的... 目录项目场景:问题描述解决方案:项目场景:从左侧列表中选取字段填入右侧下拉多选框,用户可以对右侧

Python pyinstaller实现图形化打包工具

《Pythonpyinstaller实现图形化打包工具》:本文主要介绍一个使用PythonPYQT5制作的关于pyinstaller打包工具,代替传统的cmd黑窗口模式打包页面,实现更快捷方便的... 目录1.简介2.运行效果3.相关源码1.简介一个使用python PYQT5制作的关于pyinstall

使用Python实现大文件切片上传及断点续传的方法

《使用Python实现大文件切片上传及断点续传的方法》本文介绍了使用Python实现大文件切片上传及断点续传的方法,包括功能模块划分(获取上传文件接口状态、临时文件夹状态信息、切片上传、切片合并)、整... 目录概要整体架构流程技术细节获取上传文件状态接口获取临时文件夹状态信息接口切片上传功能文件合并功能小

python实现自动登录12306自动抢票功能

《python实现自动登录12306自动抢票功能》随着互联网技术的发展,越来越多的人选择通过网络平台购票,特别是在中国,12306作为官方火车票预订平台,承担了巨大的访问量,对于热门线路或者节假日出行... 目录一、遇到的问题?二、改进三、进阶–展望总结一、遇到的问题?1.url-正确的表头:就是首先ur

C#实现文件读写到SQLite数据库

《C#实现文件读写到SQLite数据库》这篇文章主要为大家详细介绍了使用C#将文件读写到SQLite数据库的几种方法,文中的示例代码讲解详细,感兴趣的小伙伴可以参考一下... 目录1. 使用 BLOB 存储文件2. 存储文件路径3. 分块存储文件《文件读写到SQLite数据库China编程的方法》博客中,介绍了文