springBoot+vue实现登录操作和JWT验证

前言

大家好 我是歌谣 今天继续进行前后端的一个学习 目前进入的是javaweb部分 今天来聊聊登录部分和JWT验证部分的书写

用户登录loginController

``` package com.itheima.controller;

import com.itheima.pojo.Emp; import com.itheima.pojo.Result; import com.itheima.service.EmpService; import com.itheima.utils.JwtUtils; import lombok.extern.slf4j.Slf4j; 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.RestController;

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

@Slf4j @RestController public class LoginConroller { @Autowired private EmpService empService; @PostMapping("/login") public Result login(@RequestBody Emp emp) {log.info("员工登录:{}"); log.info("登录"); Emp e=empService.login(emp); //登录成功 if(e!=null){ Map claims=new HashMap<>(); claims.put("id",e.getId()); claims.put("name",e.getName()); claims.put("username",e.getUsername()); String jwt= JwtUtils.generateJwt(claims); return Result.success(jwt); } return e!=null?Result.success():Result.error("用户名和密码错误"); } }

```

EmpService

``` package com.itheima.service; import com.itheima.pojo.Emp; import com.itheima.pojo.PageBean; import org.springframework.stereotype.Service; import java.time.LocalDate; import java.util.List; public interface EmpService { PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin,LocalDate end); void delete(List ids); void save(Emp emp); Emp getById(Integer id); void update(Emp emp); Emp login(Emp emp); }

```

EmpServiceImpl实现类

``` package com.itheima.service.impl;

import com.github.pagehelper.Page; import com.github.pagehelper.PageHelper; import com.github.pagehelper.autoconfigure.PageHelperAutoConfiguration; import com.itheima.mapper.EmpMapper; import com.itheima.pojo.Emp; import com.itheima.pojo.PageBean; import com.itheima.service.EmpService; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service;

import java.time.LocalDate; import java.time.LocalDateTime; import java.util.List;

//@Service //public class EmpServiceImpl implements EmpService { // @Autowired // private EmpMapper empMapper; // @Override // public PageBean page(Integer page, Integer pageSize) { // Long count= empMapper.count(); // Integer start=(page-1)*pageSize; // empMapper.page(start,pageSize); // List empList=empMapper.page(start,pageSize); // PageBean pageBean=new PageBean(count,empList); // return pageBean; // } //} @Service public class EmpServiceImpl implements EmpService { @Autowired private EmpMapper empMapper;

@Override
public PageBean page(Integer page, Integer pageSize, String name, Short gender, LocalDate begin, LocalDate end) {
    PageHelper.startPage(page,pageSize);
    List<Emp> empList = empMapper.list(name,gender,begin,end);
    Page<Emp> p= (Page<Emp>) empList;

    PageBean pageBean=new PageBean(p.getTotal(),p.getResult());
    return pageBean;
}
@Override
public void delete(List<Integer> ids){
    empMapper.delete(ids);
}

@Override
public void save(Emp emp) {
    emp.setCreateTime(LocalDateTime.now());
    emp.setUpdateTime(LocalDateTime.now());
    empMapper.insert(emp);
}

@Override
public Emp getById(Integer id) {
    return empMapper.getById(id);
}

@Override
public void update(Emp emp) {
    emp.setUpdateTime(LocalDateTime.now());
    empMapper.update(emp);
}

@Override
public Emp login(Emp emp) {
    return empMapper.getByUsernameAndPassword(emp);
}

}

```

EmpMapper

``` package com.itheima.mapper;

import com.itheima.pojo.Emp; import org.apache.ibatis.annotations.Delete; import org.apache.ibatis.annotations.Insert; import org.apache.ibatis.annotations.Mapper; import org.apache.ibatis.annotations.Select;

import java.time.LocalDate; import java.util.List;

/* * 员工管理 */ //@Mapper //public interface EmpMapper { // @Select("select count() from emp") // public Long count(); //@Select("select * from emp limit #{start},#{pageSize}") // public List page(Integer start, Integer pageSize);

//} @Mapper public interface EmpMapper {

// @Select("select * from emp") public List list(String name, Short gender, LocalDate begin, LocalDate end);

void delete(List<Integer> ids);

@Insert("insert into emp(username,name,gender,image,job,entrydate,deptid,createtime,update_time)"+ "values(#{username},#{name},#{gender},#{image},#{job},#{entrydate},#{deptId},#{createTime},#{updateTime})")

void insert(Emp emp);
@Select("select * from emp where id=#{id}")
Emp getById(Integer id);

void update(Emp emp);
@Select("select * from emp where username=#{username} and password=#{password}"
        )
Emp getByUsernameAndPassword(Emp emp);

@Delete("delete from emp where dept_id=#{deptId}") void deleteByDeptId(Integer deptId);

}

```

JWTutils工具类

``` package com.itheima.utils;

import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm;

import java.util.Date; import java.util.Map;

public class JwtUtils { private static String signKey="itheima"; private static long expire=0L;

public static String generateJwt(Map<String,Object> claims){


    String jwt= Jwts.builder().addClaims(claims).signWith(SignatureAlgorithm.HS256,signKey)
            .setExpiration(new Date(System.currentTimeMillis()+expire)).compact();
    return jwt;
}
public  static Claims parseJWT(String jwt){
    Claims claims=Jwts.parser().setSigningKey(signKey).parseClaimsJwt(jwt).getBody();
    return claims;
}

}

```

拦截器

``` package com.itheima.interceptor;

import com.alibaba.fastjson.JSONObject; import com.itheima.utils.JwtUtils; import com.itheima.pojo.Result; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; import lombok.extern.slf4j.Slf4j;

import org.springframework.stereotype.Component; import org.springframework.util.StringUtils; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView;

@Component @Slf4j public class LoginCheckInterceptor implements HandlerInterceptor { @Override public boolean preHandle(HttpServletRequest req, HttpServletResponse resp, Object handler) throws Exception { System.out.println("preHandle");

String url=req.getRequestURL().toString();
log.info("请求url",url);
   if(url.contains("login")){
       return true;
   }
    String jwt=req.getHeader("token");
    log.info("jwt",jwt);
   try {
       JwtUtils.parseJWT(jwt);

   }catch (Exception e){
       if(!StringUtils.hasLength(jwt)){
           Result error=Result.error("NOT_LOGIN");
           String notLogin= JSONObject.toJSONString(error);
           resp.getWriter().write(notLogin);
           return false;
       }
   }


   log.info("放行");
   return true;

}

@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
    System.out.println("postHandle");
}

@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
    System.out.println("afterCompletion");
}

}

```

配置webconfig

``` package com.itheima.config;

import com.itheima.interceptor.LoginCheckInterceptor; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.annotation.Configuration; import org.springframework.web.servlet.config.annotation.InterceptorRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @Configuration public class webConfig implements WebMvcConfigurer { @Autowired private LoginCheckInterceptor loginCheckInterceptor; @Override public void addInterceptors(InterceptorRegistry registry) { registry.addInterceptor(loginCheckInterceptor).addPathPatterns("/**"). excludePathPatterns("/login"); } }

```

运行结果

在这里插入图片描述

直接访问会弹出页面(token过期)

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值