SSM项目使用 * 实现登录验证功能

作者:小奇Java面试 时间:2023-06-17 16:12:38 

登录接口实现

SSM项目使用 * 实现登录验证功能

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信息,如下图。

SSM项目使用 * 实现登录验证功能

* 类代码实现

SSM项目使用 * 实现登录验证功能

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.如果登录过就直接访问接口,如果没有登录过就跳转到登录页面进行登录

配置文件实现

SSM项目使用 * 实现登录验证功能

<!--自定义 * -->
   <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

标签:SSM项目, , ,登录验证
0
投稿

猜你喜欢

  • Java Swing实现让窗体居中显示的方法示例

    2023-11-06 02:59:07
  • Java微信公众平台之自定义菜单

    2021-09-10 15:36:10
  • C#中数组、ArrayList、List、Dictionary的用法与区别浅析(存取数据)

    2021-05-27 03:55:49
  • IDEA提高开发效率的7个插件(推荐)

    2021-10-16 15:28:35
  • java swing实现的扫雷游戏及改进版完整示例

    2022-02-27 02:01:18
  • Activiti开发环境的配置

    2021-07-31 21:57:51
  • Android控件CardView实现卡片布局

    2022-12-05 02:10:32
  • SpringMVC按Ctrl上传多个文件的方法

    2023-11-25 07:19:04
  • Dwr3.0纯注解(纯Java Code配置)配置与应用浅析一之零配置文件化

    2022-06-05 05:20:17
  • Java8中Lambda表达式使用和Stream API详解

    2022-04-27 13:25:23
  • WPF+SkiaSharp实现自绘弹幕效果

    2022-09-30 09:52:38
  • 详解Java中Callable和Future的区别

    2023-07-25 21:18:58
  • java equals函数用法详解

    2022-07-31 06:40:20
  • C# WebApi 接口返回值不困惑:返回值类型详解

    2022-05-06 13:16:35
  • Java DatabaseMetaData用法案例详解

    2023-08-18 19:08:42
  • 基于TCP通信丢包原因总结(推荐)

    2022-04-27 04:37:28
  • C#定义并实现单链表实例解析

    2022-04-15 12:53:09
  • WinForm判断关闭事件来源于用户点击右上角“关闭”按钮的方法

    2021-05-28 13:00:43
  • Mybatis中的常用OGNL表达式

    2023-09-29 10:48:33
  • 掌握Android Handler消息机制核心代码

    2023-11-29 18:29:23
  • asp之家 软件编程 m.aspxhome.com