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

相关文章

MySQL中查找重复值的实现

《MySQL中查找重复值的实现》查找重复值是一项常见需求,比如在数据清理、数据分析、数据质量检查等场景下,我们常常需要找出表中某列或多列的重复值,具有一定的参考价值,感兴趣的可以了解一下... 目录技术背景实现步骤方法一:使用GROUP BY和HAVING子句方法二:仅返回重复值方法三:返回完整记录方法四:

IDEA中新建/切换Git分支的实现步骤

《IDEA中新建/切换Git分支的实现步骤》本文主要介绍了IDEA中新建/切换Git分支的实现步骤,通过菜单创建新分支并选择是否切换,创建后在Git详情或右键Checkout中切换分支,感兴趣的可以了... 前提:项目已被Git托管1、点击上方栏Git->NewBrancjsh...2、输入新的分支的

Python实现对阿里云OSS对象存储的操作详解

《Python实现对阿里云OSS对象存储的操作详解》这篇文章主要为大家详细介绍了Python实现对阿里云OSS对象存储的操作相关知识,包括连接,上传,下载,列举等功能,感兴趣的小伙伴可以了解下... 目录一、直接使用代码二、详细使用1. 环境准备2. 初始化配置3. bucket配置创建4. 文件上传到os

关于集合与数组转换实现方法

《关于集合与数组转换实现方法》:本文主要介绍关于集合与数组转换实现方法,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、Arrays.asList()1.1、方法作用1.2、内部实现1.3、修改元素的影响1.4、注意事项2、list.toArray()2.1、方

使用Python实现可恢复式多线程下载器

《使用Python实现可恢复式多线程下载器》在数字时代,大文件下载已成为日常操作,本文将手把手教你用Python打造专业级下载器,实现断点续传,多线程加速,速度限制等功能,感兴趣的小伙伴可以了解下... 目录一、智能续传:从崩溃边缘抢救进度二、多线程加速:榨干网络带宽三、速度控制:做网络的好邻居四、终端交互

java实现docker镜像上传到harbor仓库的方式

《java实现docker镜像上传到harbor仓库的方式》:本文主要介绍java实现docker镜像上传到harbor仓库的方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录1. 前 言2. 编写工具类2.1 引入依赖包2.2 使用当前服务器的docker环境推送镜像2.2

C++20管道运算符的实现示例

《C++20管道运算符的实现示例》本文简要介绍C++20管道运算符的使用与实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录标准库的管道运算符使用自己实现类似的管道运算符我们不打算介绍太多,因为它实际属于c++20最为重要的

Java easyExcel实现导入多sheet的Excel

《JavaeasyExcel实现导入多sheet的Excel》这篇文章主要为大家详细介绍了如何使用JavaeasyExcel实现导入多sheet的Excel,文中的示例代码讲解详细,感兴趣的小伙伴可... 目录1.官网2.Excel样式3.代码1.官网easyExcel官网2.Excel样式3.代码

python实现对数据公钥加密与私钥解密

《python实现对数据公钥加密与私钥解密》这篇文章主要为大家详细介绍了如何使用python实现对数据公钥加密与私钥解密,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录公钥私钥的生成使用公钥加密使用私钥解密公钥私钥的生成这一部分,使用python生成公钥与私钥,然后保存在两个文

浏览器插件cursor实现自动注册、续杯的详细过程

《浏览器插件cursor实现自动注册、续杯的详细过程》Cursor简易注册助手脚本通过自动化邮箱填写和验证码获取流程,大大简化了Cursor的注册过程,它不仅提高了注册效率,还通过友好的用户界面和详细... 目录前言功能概述使用方法安装脚本使用流程邮箱输入页面验证码页面实战演示技术实现核心功能实现1. 随机