• 登录功能(基于SpringBoot+MP+Vue实现的功能)


    目录

    前言

    一、UserMapper层代码分析

    二、UserService层代码分析

    1.UserService接口

    2.UserServiceImpl实现类

    3.UserController层代码分析 

     4.拦截器设置

     5.展示效果图

    总结


    前言

          登录功能是web开发中常见的功能,也是学后端必须要练得一个功能,本次的登录功能相对完善一些,知识拦截器部分写的比较少,这部分提供给大家思考和完善相应的功能。这个功能已达到毕设的水准,基本知识点都是按照毕设的常用的知识点去编写的。


    一、UserMapper层代码分析

    创建接口UserMapper并实现MP的基本步骤。

    1. @Repository
    2. public interface UserMapper extends BaseMapper {
    3. }

    二、UserService层代码分析

    1.UserService接口

    创建登录所需的方法。

    1. public interface UserService {
    2. // 登录
    3. User login(String username, String password);
    4. }

    2.UserServiceImpl实现类

    Controller层传过来的用户名和密码先进行对密码使用MD5进行加密(数据库表存储的密码是加密后的密文,以保证用户密码的安全性),然后在进行MP的条件查询访问数据库查询该用户名和密码的用户。

    1. @Service
    2. public class UserServiceImpl implements UserService {
    3. @Autowired
    4. private UserMapper userMapper;
    5. @Override
    6. public User login(String username, String password) {
    7. //加密
    8. String passwordWithMd5 = MD5Util.md5(password);
    9. //根据用户名和加密之后的密码从数据库查询用户
    10. //select * from user where username = ? and password = ?
    11. LambdaQueryWrapper wrapper=new LambdaQueryWrapper();
    12. wrapper.eq(User::getUsername,username)
    13. .eq(User::getPassword,passwordWithMd5);
    14. //返回查询结果
    15. return userMapper.selectOne(wrapper);
    16. }
    17. }

    3.UserController层代码分析 

    对登录进行判断是否登录成功,给前端返回Map集合{“code”,"0"}为登录失败返回的内容。Map集合{“code”,"1"}为登录成功返回的内容。登录成功需要用JWT技术返回一个令牌(token)。

    1. @RestController
    2. public class UserController {
    3. @Autowired
    4. private UserService userService;
    5. Map map=new HashMap<>();
    6. // 登录
    7. @RequestMapping("/admin/user/login")
    8. public Map login(String username,String password){
    9. User user=userService.login(username,password);
    10. if(user==null){//登录失败
    11. map.put("code","0");
    12. }else {//登录成功
    13. HashMap tokenMap = new HashMap();
    14. tokenMap.put("id", user.getId());
    15. String token = JwtUtil.createToken(tokenMap);
    16. map.put("token",token);
    17. map.put("code","1");
    18. }
    19. return map;
    20. }
    21. }

    JWT 技术创建token、解析token代码。

    1. //JWT的生成和解析
    2. public class JwtUtil {
    3. // 创建token
    4. public static String createToken(Map claims) {
    5. return Jwts.builder()
    6. .setExpiration(new Date(System.currentTimeMillis() + 1000 * 60 * 60 * 24))//设置有效时间为1天
    7. .setClaims(claims) //设置响应数据体
    8. .signWith(SignatureAlgorithm.HS256, "heima_movies") //设置加密方法和加密盐
    9. .compact();
    10. }
    11. // 解析token
    12. public static Map parseToken(String token) {
    13. return Jwts.parser().setSigningKey("heima_movies")
    14. .parseClaimsJws(token)
    15. .getBody();
    16. }
    17. }

     4.拦截器设置

    访问拦截器时查看上面的token是否存在,存在则用户登录成功状态放行,否则禁止通行返回401状态码。

    1. //访问拦截器
    2. @Component
    3. public class LoginInterceptor implements HandlerInterceptor {
    4. @Override
    5. public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
    6. try {
    7. String token = request.getHeader("token");//从请求头获取token
    8. Map map = JwtUtil.parseToken(token);
    9. BeanUtil.mapToBean(map, Member.class, true);
    10. return true;//放行
    11. } catch (Exception e) {
    12. response.setStatus(401);
    13. return false;//禁止通行,返回401状态码
    14. }
    15. }
    16. }

    拦截器需拦截的内容和放行的路径设置。将管理员部分路径拦截不让普通用户访问。

    1. @Configuration
    2. public class ManagerConfig implements WebMvcConfigurer {
    3. @Autowired
    4. private LoginInterceptor loginInterceptor;
    5. //设置拦截器
    6. @Override
    7. public void addInterceptors(InterceptorRegistry registry) {
    8. //定义放行路径
    9. ArrayList urls = new ArrayList<>();
    10. urls.add("/**/*.js");//管理系统静态资源
    11. urls.add("/**/*.css");//管理系统静态资源
    12. urls.add("/**/*.jpg");//管理系统静态资源
    13. urls.add("/**/*.png");//管理系统静态资源
    14. urls.add("/**/*.html");//管理系统静态资源
    15. urls.add("/admin/user/login");//管理系统登录请求
    16. urls.add("/admin/user/logout");//管理系统退出请求
    17. //配置拦截器和路径
    18. registry.addInterceptor(loginInterceptor)
    19. .addPathPatterns("/admin/**")//拦截所有
    20. .excludePathPatterns(urls); //放行指定路径
    21. }
    22. }

     5.展示效果图

    登录页,在不输入用户名和密码访问路径http://localhost:8080/index.html会跳转到登录页面,被拦截器拦截,

     输入正确的用户名和密码后跳转到主页面。

    f12查看token存在的位置和值(这也是有令牌才可正常进入主功能页面)


    总结

      基于SpringBoot+MP+VUE的登录功能的实现考虑的相对全面,可作为毕设的参考。但VUE方面的代码在这里没有展示。想要了解的可以自己学学Vue知识点,主要还是JWT技术的运用。还有后端的代码逻辑的分析。 

  • 相关阅读:
    NOKOV动作捕捉系统使多场协同无人机自主建造成为可能
    2023年4月到7月工作经历
    shell之循环语句(for、while、until)
    Chrome内核插件开发报错:Unchecked runtime.lastError:的原因及解决办法。
    this用法总结
    十三、DataFrame表格型数据结构
    如何备份Syslog配置文件?
    go语言学习之旅之go语言基础语法
    Transmodeler中的路边停车,让车停进去的参数在哪儿设置?
    汇总各种数据库越权操作的错误码
  • 原文地址:https://blog.csdn.net/weixin_52258054/article/details/127924810