SSM项目使用 * 实现登录验证功能
作者:小奇Java面试 发布时间:2023-06-17 16:12:38
登录接口实现
public User queryUser(String UserName, String Password,HttpServletRequest request, HttpServletResponse response) {
User user = userMapper.queryUser(UserName,Password);
if(!StringUtils.isEmpty(user)){
//1.获取session
HttpSession session = request.getSession();
//2.获取sessionid
String sessionId = session.getId();
//3.将sessionid作为key,用户信息user作为value,放入session中
session.setAttribute(sessionId,user);
//4.将sessionId存到cookie中,"JSESSIONID"为自定义的key值
Cookie cookie = new Cookie("JSESSIONID",sessionId);
//5.设置cookie的有效路径
cookie.setPath(request.getContextPath());
//6.将cookie返回给页面
response.addCookie(cookie);
}
return user;
}
代码思路:
1.用户输入账号密码登录成功后获取用户信息(User)
2.获取session,得到sessionid(注:每一个session对象都有一个sessionid)
3.将sessionid作为key,用户信息(User)作为value,放入session中
4.创建一个Cookie对象,将"JSESSIONID"作为key,sessionId作为value,放入cookie中
5.设置cookie的有效路径,将cookie返回给页面,此时页面就可以收到key为"JSESSIONID",value为sessionId的cookie信息,如下图。
* 类代码实现
public class Filter extends HandlerInterceptorAdapter {
private static Logger logger = Logger.getLogger(Filter.class);
/**
* 进入 * 后首先进入的方法
* 返回false则不再继续执行
* 返回true则继续执行
*/
@Override
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler)throws Exception
{
//1.定义sessionid变量
String sessionid = "";
//2.获取session对象
HttpSession session=request.getSession();
//3.获取页面上所有的cookie
Cookie[] cookies = request.getCookies();
//4.循环寻找名称为"JSESSIONID"的cookie
for(Cookie cookie:cookies){
if(cookie.getName().equals("JSESSIONID")){
sessionid = cookie.getValue();
}
}
//5.根据sessionid获取用户信息
User user = (User) session.getAttribute(sessionid);
if(StringUtils.isEmpty(user)) {
logger.info("用户未登录");
//用户未登录跳转到登录页面
response.sendRedirect("login");
return false;
}
logger.info("用户已登录");
return true;
}
}
代码思路:
1.自定义一个 * 类,首先要继承HandlerInterceptorAdapter,并重写preHandle方法,在此方法中编写 * 的逻辑代码
2.获取cookies数组,这个数组有浏览器中的所有cookies信息,循环遍历找到name为"JSESSIONID"的cookies,并获取到其value值,这个值就是sessionid
3.通过sessionid查找user对象,如果能获取对象证明登录过,如果不能获取到对象证明没有登录过
4.如果登录过就直接访问接口,如果没有登录过就跳转到登录页面进行登录
配置文件实现
<!--自定义 * -->
<mvc:interceptors>
<mvc:interceptor>
<!--配置要拦截的路径-->
<mvc:mapping path="/**"/>
<!--配置登录接口不被拦截-->
<mvc:exclude-mapping path="/user/login"/>
<!--指定 * 类路径-->
<bean class="com.lishiqi.Util.Filter"></bean>
</mvc:interceptor>
</mvc:interceptors>
配置含义:
1.我们使用 * 肯定要规定拦截哪些接口,首先我们将所有的接口都拦截
2.然后我们发现问题,此时登录接口也在拦截范围中,所以我们正常调用登录接口之前他也会拦截判断一下用户是否登录过,这个时候用户肯定没有登录过,那么就会又跳转到登录界面,我们再次登录还是跳转到登录页面,一直登录不上,所以我们需要把登录接口配置为不拦截
3.然后我们指定我们配置好的 * 类路径,这个时候可以在该类中进行登录验证操作了
4.此配置文件为spring-mvc.xml配置文件
来源:https://segmentfault.com/a/1190000041323617


猜你喜欢
- 这个例子用于演示在Spring Boot应用中如何验证Web 应用的输入,我们将会建立一个简单的Spring MVC应用,来读取用户输入并使
- 将来自客户端的请求传入一个对象,从而使你可用不同的请求对客户进行参数化。用于“行为请求者”与“行为实现者”解耦,可实现二者之间的松耦合,以便
- 一:item的根布局设置Android:clickable="true",之后导致item点击事件失效,对根
- 本文较为深入的分析了android中UI主线程与子线程。分享给大家供大家参考。具体如下:在一个Android 程序开始运行的时候,会单独启动
- 1.更新MAC地址 将注册表中的键值添加上MAC地址2.重新连接网络 试过了3个方法: Ma
- Java语言是SUN(Stanford University Network,斯坦福大学网络公司)公司1995年推出的一门高级编程语言,起初
- 服装价格变动,触发淘宝发布活动和消费者购买衣服事件流public class EventStandard { &n
- 由于GitHub上面的zxing功能太多,有的用不到,我就抽取了重要的出来使用,这个可以生成二维码,扫描二维码和相册中的二维码Demo效果:
- 自己闲下来时间写的一个课表控件,使用的自定义LinearLayout,里面View都是用代码实现的,最终效果如下图,写的可能有问题希望多多指
- 在网上也没有找到好的解决方案,于是自己研究了下给解决了,分享给大家,希望对大家能有所帮助。一、异常信息这种情况是因为FTP设置的默认目录引发
- 在此之前,脚本之家已经为大家整理了很多关于经典问题红黑树的思路和解决办法。本篇文章,是通过分析java.util.TreeMap源码,让大家
- 对于数据的访问来说,肯定是在有缓存的情况下运行快一些。对于Hibernate这种与数据库结合紧密的框架来说,在调用数据的时候肯定会有缓存的出
- 为什么要在J2EE项目中谈异常处理呢?可能许多java初学者都想说:“异常处理不就是try….catch…finally吗?这谁都会啊!”。
- 目录图像修复API操作效果源码图像修复实际应用中,图像常常容易受损,如存在污渍的镜头、旧照片的划痕、人为的涂画(比如马赛克),亦或是图像本身
- 一、APP通过View修改鼠标样式app view上修改鼠标样式比较简单,通过 hover event 获取鼠标坐标并使用如下方法
- 我们使用Spring整合Quartz开发,本实例采用数据库模式的demo。xml文件配置如下:<?xml version="
- 使用idea的file-》settings-》plugins安装maven helper插件失败,安装页面总是提示installed,在in
- 1:普通实现99乘法表太简单,是个程序员都会,实现如下:package test.ms;public class Test99 {publi
- 安装APKpublic class DownLoadApk { public static SharedPreferences shared
- 1.理解全过程1.1.概述需要具备的知识Socket网络编程反向代理的理解平滑加权轮询算法的理解线程池的理解目的:实现Socket 集群服务