创建TokenUtils(生成/验证)工具类
package ;
import ;
import ;
import com.;
import com.;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
@Component
public class TokenUtils {
private static IUserService staticUserService;
@Autowired
private IUserService userService;
@PostConstruct
public void setUserService(){
staticUserService = userService;
}
//生成token
public static String genToken(String userId, String sign) {
return ().withAudience(userId) // 将 user id 保存到 token 里面,作为载荷
.withExpiresAt((new Date(), 2)) // 2小时后token过期
.sign(Algorithm.HMAC256(sign)); // 以 password 作为 token 的密钥
}
//获取当前用户对象信息
public static User getCurrentUser(){
try {
HttpServletRequest request = ((ServletRequestAttributes) ()).getRequest();
String token = ("token");
if ((token)){
String userId = (token).getAudience().get(0);
return ((userId));
}
} catch (Exception e) {
return null;
}
return null;
}
}
创建Jwt拦截器 JwtInterceptor(拦截所有请求验证token)
package ;
import ;
import com.;
import com.;
import com.;
import com.;
import com.;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
public class JwtInterceptor implements HandlerInterceptor {
@Autowired
private IUserService userService;
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) {
String token = ("token");
//如果不映射到方法直接通过
if(!(handler instanceof HandlerMethod)){
return true;
}
// 执行认证
if ((token)) {
throw new ServiceException(Constants.CODE_401, "无token,请重新登录");
}
// 获取 token 中的userId
String userId;
try {
userId = (token).getAudience().get(0);
} catch (JWTDecodeException j) {
throw new ServiceException(Constants.CODE_401, "token验证失败");
}
//根据token中的userid查询数据库
User user = (userId);
if (user == null) {
throw new ServiceException(Constants.CODE_401, "用户不存在,请重新登录");
}
// 用户密码加签验证 token
JWTVerifier jwtVerifier = (Algorithm.HMAC256(())).build();
try{
(token); // 验证token
} catch (JWTVerificationException e) {
throw new ServiceException(Constants.CODE_401, "token验证失败,请重新登录");
}
return true;
}
}
将拦截器注入到SpirngMVC
package ;
import ;
import ;
import ;
import ;
import ;
@Configuration
public class InterceptorConfig implements WebMvcConfigurer {
@Override
public void addInterceptors (InterceptorRegistry registry){
(jwtInterceptor())
.addPathPatterns("/**") //拦截所有请求,通过判断token是否合法来决定是否需要登录
.excludePathPatterns("/user/login","/user/register");
}
@Bean
public JwtInterceptor jwtInterceptor(){
return new JwtInterceptor();
}
}
创建Controller进行测试
package ;
import ;
import ;
import ;
import ;
import ;
import ;
import ;
import .*;
import ;
import ;
import ;
import ;
import ;
/**
* <p>
* 前端控制器
* </p>
*
* @author zuozhe
* @since 2023-01-12
*/
@RestController
@RequestMapping("/user")
public class UserController {
//写逻辑代码生成
@Resource
private IUserService userService;
//登录
@PostMapping("/login")
public Result login(@RequestBody UserDTO userDTO) {
String username = ();
String password = ();
if ((username) || (password)){
return (Constants.CODE_400,"参数错误");
}
UserDTO dto = (userDTO);
return (dto);
}
//注册
@PostMapping("/register")
public Result register(@RequestBody UserDTO userDTO) {
String username = ();
String password = ();
if ((username) || (password)){
return (Constants.CODE_400,"参数错误");
}
return ((userDTO));
}
//新增或者更新
@PostMapping
public boolean save(@RequestBody User user) {
return (user);
}
//删除数据
@DeleteMapping("/{id}")
public boolean delete(@PathVariable Integer id) {
return (id);
}
//查询所有数据
@GetMapping
public List<User> findAll() {
return ();
}
//根据id查询
@GetMapping("/id")
public User findOne(@PathVariable Integer id) {
return (id);
}
//个人信息补充
@GetMapping("/username/{username}")
public User findOne(@PathVariable String username) {
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
("username",username);
return (queryWrapper);
}
//分页查询
@GetMapping("/page")
public Page<User> findPage(@RequestParam Integer pageNum,
@RequestParam Integer pageSize,
@RequestParam(defaultValue = "")String username,
@RequestParam(defaultValue = "")String phone,
@RequestParam(defaultValue = "")String buildingId){
QueryWrapper<User> queryWrapper = new QueryWrapper<>();
if (!"".equals(username)){
("username",username);
}
if (!"".equals(phone)){
("phone",phone);
}
if (!"".equals(buildingId)){
("building_id",buildingId);
}
//获取当前用户信息
User currentUser = ();
(());
return (new Page<> (pageNum , pageSize),queryWrapper);
}
}
(注:有一些增删改查的业务可忽略)
相关文章
- SpringBoot集成Jwt(详细步骤+图解)
- springboot实现最基础的登录注册功能(步骤详细,逻辑清晰)
- Springboot2(30)集成kafka--详细讲解@KafkaListener
- SpringBoot和Vue实现用户个人信息展示与保存与集成JWT——基于SpringBoot和Vue的后台管理系统项目系列博客(十四)
- AJAX JS DOM前后台交互 详细步骤手把手(图解)
- 用springboot对接支付宝支付接口的详细开发步骤总结
- 动态路由—RIP(路由信息协议)及基于GNS3上动态路由设置的基本步骤(详细+图解)...
- 关于如何使用Docker启动consul以及将consul集成到SpringBoot中的步骤
- 集成微信支付的详细的步骤
- java服务端集成极光消息推送--详细开发步骤