Java基于Session登录验证的实现示例

 更新时间:2024年02月20日 11:42:54   作者:Luke Ewin  
基于Session的登录验证方式是最简单的一种登录校验方式,本文主要介绍了Java基于Session登录验证的实现示例,具有一定的参考价值,感兴趣的可以了解一下

基于Session的登录验证方式是最简单的一种登录校验方式。

为啥能用Session作为登录验证的一种方式,因为每个用户的请求都会有一个Session,这个对象是Servlet给我们创建的,不需要我们手动创建,并且这个对象的作用域为整个Web页面,也就是在整个项目中,这个Session可以存储一些内容,相当于全局缓存,并且这个Session有默认的过期时间,默认为30分钟,使得保存到Session对象中的值,可以在各个Web页面中共享。因此,我们可以利用这个特性保存用户的登录信息。我们可以编写一个拦截器,在拦截器中通过request对象获取Session对象,然后根据Key值获取到Value值,类似于Map集合,获取到值后和数据库进行比对,如果用户名和密码一致就放行,否则拦截。

下面是具体的代码:通过请求登录接口校验输入的用户名和密码是否正确,如果正确就把这个用户信息保存到Session对象中。

package com.ukefu.characterglm.controller;

import cn.hutool.crypto.SecureUtil;
import com.ukefu.characterglm.entity.User;
import com.ukefu.characterglm.service.UserService;
import com.ukefu.characterglm.utils.BaseResponse;
import com.ukefu.characterglm.utils.ErrorCode;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpSession;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.HashMap;
import java.util.Map;

/**
 * @author Luke Ewin
 * @date 2024/2/4 14:07
 * @blog blog.lukeewin.top
 */
@RestController
@RequestMapping("/user")
public class UserController {

    @Autowired
    private UserService userService;

    @PostMapping("/login")
    public BaseResponse login(HttpServletRequest request, @RequestBody User user) {
        if (user != null && StringUtils.isNotBlank(user.getName()) && StringUtils.isNotBlank(user.getPassword())) {
            String name = user.getName();
            String password = user.getPassword();

            User tempUser = userService.login(name, SecureUtil.md5(password));
            if (tempUser != null) {
                Map<String, String> map = new HashMap<>();
                map.put("id", String.valueOf(tempUser.getId()));
                map.put("name", tempUser.getName());
                map.put("email", tempUser.getEmail());
                map.put("phone", tempUser.getPhone());
                // 保存用户的登录状态
                HttpSession session = request.getSession();
                session.setAttribute("user", tempUser);
                return BaseResponse.success(map);
            } else {
                return BaseResponse.error(ErrorCode.USERNAME_PASSWORD_ERROR);
            }
        }
        return BaseResponse.error(ErrorCode.MISS_PARAMS);
    }
}

拦截器:

public class LoginInterceptor implements HandlerInterceptor {

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        HttpSession session = request.getSession();
        Object user = session.getAttribute("user");
        if (user != null) {
            return true;
        }
        request.getRequestDispatcher("/error/login").forward(request, response);
        return false;
    }
}

配置:把自定义的拦截器添加到容器内

@Configuration
public class WebConfig implements WebMvcConfigurer {
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(new LoginInterceptor()).addPathPatterns("/**").excludePathPatterns("/user/login", "/error/**");
    }
}

这里需要注意:一定要记得放行/error/**,否则会报错。

到此这篇关于Java基于Session登录验证的实现示例的文章就介绍到这了,更多相关Java Session登录验证内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一个简单的java学生寝室查询系统

    一个简单的java学生寝室查询系统

    这篇文章主要为大家详细介绍了一个简单的java学生寝室查询系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2017-10-10
  • SpringBoot集成Swagger2生成接口文档的方法示例

    SpringBoot集成Swagger2生成接口文档的方法示例

    我们提供Restful接口的时候,API文档是尤为的重要,它承载着对接口的定义,描述等,本文主要介绍了SpringBoot集成Swagger2生成接口文档的方法示例,需要的朋友们下面随着小编来一起学习学习吧
    2018-12-12
  • Java中Stream的flatMap与map使用场景及区别详解

    Java中Stream的flatMap与map使用场景及区别详解

    这篇文章主要介绍了Java中Stream的flatMap与map使用场景及区别详解,Stream 流式操作,一般用于操作集合即 List 一类的数据结构,简单来说 Stream 的 map 使得其中的元素转为另一种元素的映射(map)方法,需要的朋友可以参考下
    2024-01-01
  • mybatis Interceptor对UpdateTime自动处理的实现方法

    mybatis Interceptor对UpdateTime自动处理的实现方法

    这篇文章主要给大家介绍了关于使用mybatis Interceptor对UpdateTime自动处理的实现方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起看看吧
    2018-12-12
  • 超简洁java实现双色球若干注随机号码生成(实例代码)

    超简洁java实现双色球若干注随机号码生成(实例代码)

    这篇文章主要介绍了超简洁java实现双色球若干注随机号码生成(实例代码),本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-04-04
  • java用LocalDateTime类获取当天时间、前一天时间及本周/本月的开始和结束时间

    java用LocalDateTime类获取当天时间、前一天时间及本周/本月的开始和结束时间

    这篇文章主要给大家介绍了关于java使用LocalDateTime类获取当天时间、前一天时间及本周/本月的开始和结束时间的相关资料,文中通过代码示例介绍的非常详细,需要的朋友可以参考下
    2023-08-08
  • java方法重写(重点讲),方法重载问题

    java方法重写(重点讲),方法重载问题

    这篇文章主要介绍了java方法重写(重点讲),方法重载问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-05-05
  • 从架构思维角度分析分布式锁方案

    从架构思维角度分析分布式锁方案

    这篇文章主要介绍了从架构与思维的角度来分析分布式锁的方案,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-01-01
  • 配置Servlet两种方法以及特点详解

    配置Servlet两种方法以及特点详解

    这篇文章主要介绍了配置Servlet两种方法以及特点详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-03-03
  • 深入理解Spring Aop的执行顺序

    深入理解Spring Aop的执行顺序

    本文将结合实例代码,介绍Spring Aop的执行顺序,非常具有实用价值,需要的朋友可以参考下
    2021-06-06

最新评论