parent
f8cd2a11f8
commit
155c336835
@ -0,0 +1,29 @@
|
||||
package com.unilife.config;
|
||||
|
||||
import com.unilife.interceptor.JwtInterceptor;
|
||||
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 WebMvcConfig implements WebMvcConfigurer {
|
||||
@Autowired
|
||||
private JwtInterceptor jwtInterceptor;
|
||||
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(jwtInterceptor).addPathPatterns("/**")
|
||||
.excludePathPatterns(
|
||||
"/users/login",
|
||||
"/users/register",
|
||||
"/users/code",
|
||||
"/users/login/code",
|
||||
"/swagger-resources/**",
|
||||
"/v2/api-docs/**",
|
||||
"/doc.html",
|
||||
"/webjars/**"
|
||||
);
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,54 @@
|
||||
package com.unilife.interceptor;
|
||||
|
||||
import cn.hutool.core.util.StrUtil;
|
||||
import com.unilife.utils.BaseContext;
|
||||
import com.unilife.utils.JwtUtil;
|
||||
import lombok.extern.slf4j.Slf4j;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.data.redis.core.StringRedisTemplate;
|
||||
import org.springframework.stereotype.Component;
|
||||
import org.springframework.web.servlet.HandlerInterceptor;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@Component
|
||||
@Slf4j
|
||||
public class JwtInterceptor implements HandlerInterceptor {
|
||||
@Autowired
|
||||
private JwtUtil jwtUtil;
|
||||
|
||||
@Autowired
|
||||
private StringRedisTemplate stringRedisTemplate;
|
||||
|
||||
|
||||
@Override
|
||||
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
|
||||
|
||||
log.info("JwtInterceptor preHandle");
|
||||
String token = request.getHeader("Authorization");
|
||||
|
||||
if(StrUtil.isBlank(token)){
|
||||
response.setStatus(401);
|
||||
return false;
|
||||
}
|
||||
|
||||
boolean verified = jwtUtil.verifyToken(token);
|
||||
if (!verified) {
|
||||
response.setStatus(401);
|
||||
return false;
|
||||
}
|
||||
|
||||
//从token中获取userid并存入threadlocal
|
||||
Long userId = jwtUtil.getUserIdFromToken(token);
|
||||
BaseContext.setId(userId);
|
||||
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
|
||||
BaseContext.removeId();
|
||||
}
|
||||
}
|
@ -1,19 +1,14 @@
|
||||
package com.unilife.model.dto;
|
||||
//这个是注册的DTO
|
||||
//这个才是登录的DTO
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class LoginDTO {
|
||||
private String username;
|
||||
private String email;
|
||||
private String password;
|
||||
private String nickname;
|
||||
private String studentId;
|
||||
private String department;
|
||||
private String major;
|
||||
private String grade;
|
||||
}
|
||||
|
@ -0,0 +1,19 @@
|
||||
package com.unilife.model.dto;
|
||||
//这个是注册的DTO
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class RegisterDTO {
|
||||
private String username;
|
||||
private String email;
|
||||
private String password;
|
||||
private String nickname;
|
||||
private String studentId;
|
||||
private String department;
|
||||
private String major;
|
||||
private String grade;
|
||||
}
|
@ -1,27 +0,0 @@
|
||||
package com.unilife.model.vo;
|
||||
|
||||
import com.unilife.model.entity.User;
|
||||
import lombok.Data;
|
||||
|
||||
@Data
|
||||
public class LogVO {
|
||||
private Integer id;
|
||||
private String username;
|
||||
private String nickname;
|
||||
private String avatar;
|
||||
private Byte role;
|
||||
private Byte isVerified;
|
||||
private Byte status;
|
||||
|
||||
public LogVO(Integer id,String username,String nickname,String avatar,Byte role,Byte isVerified,Byte status)
|
||||
{
|
||||
this.id = id;
|
||||
this.username = username;
|
||||
this.nickname = nickname;
|
||||
this.avatar = avatar;
|
||||
this.role = role;
|
||||
this.isVerified = isVerified;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -1,17 +1,21 @@
|
||||
package com.unilife.model.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
public class LoginVO {
|
||||
private Integer id;
|
||||
private Long id;
|
||||
private String username;
|
||||
private String nickname;
|
||||
private String avatar;
|
||||
private Byte role;
|
||||
private Byte isVerified;
|
||||
private Byte status;
|
||||
private String token;
|
||||
|
||||
public LoginVO(Integer id, String username, String nickname)
|
||||
{
|
||||
this.id = id;
|
||||
this.username = username;
|
||||
this.nickname = nickname;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,14 +1,15 @@
|
||||
package com.unilife.model.dto;
|
||||
//这个才是登录的DTO
|
||||
package com.unilife.model.vo;
|
||||
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@Data
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
public class LogDTO {
|
||||
private String email;
|
||||
private String password;
|
||||
@NoArgsConstructor
|
||||
public class RegisterVO {
|
||||
private Long id;
|
||||
private String username;
|
||||
private String nickname;
|
||||
|
||||
}
|
@ -1,18 +1,16 @@
|
||||
package com.unilife.service;
|
||||
|
||||
import com.unilife.common.result.Result;
|
||||
import com.unilife.model.dto.LogDTO;
|
||||
import com.unilife.model.dto.LoginDTO;
|
||||
import com.unilife.model.dto.LoginEmailDTO;
|
||||
import com.unilife.model.dto.RegisterDTO;
|
||||
|
||||
|
||||
public interface UserService {
|
||||
Result register(LoginDTO loginDTO);
|
||||
Result login(LogDTO logDTO);
|
||||
Result register(RegisterDTO registerDTO);
|
||||
Result login(LoginDTO loginDTO);
|
||||
|
||||
Result sendVerificationCode(String email);
|
||||
|
||||
Result loginWithEmail(LoginEmailDTO loginEmailDTO);
|
||||
|
||||
|
||||
}
|
||||
|
@ -0,0 +1,19 @@
|
||||
package com.unilife.utils;
|
||||
|
||||
public class BaseContext {
|
||||
|
||||
public static ThreadLocal<Long> threadLocal = new ThreadLocal<>();
|
||||
|
||||
public static void setId(Long id) {
|
||||
threadLocal.set(id);
|
||||
}
|
||||
|
||||
public static Long getId() {
|
||||
return threadLocal.get();
|
||||
}
|
||||
|
||||
public static void removeId() {
|
||||
threadLocal.remove();
|
||||
}
|
||||
|
||||
}
|
@ -0,0 +1,45 @@
|
||||
package com.unilife.utils;
|
||||
|
||||
import cn.hutool.core.date.DateTime;
|
||||
import cn.hutool.jwt.JWTUtil;
|
||||
import org.springframework.beans.factory.annotation.Value;
|
||||
import org.springframework.stereotype.Component;
|
||||
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
|
||||
@Component
|
||||
public class JwtUtil {
|
||||
@Value("${jwt.secret}")
|
||||
private String secret;
|
||||
|
||||
@Value("${jwt.expiration}")
|
||||
public long expiration;
|
||||
|
||||
public String generateToken(Long id) {
|
||||
DateTime now = DateTime.now();
|
||||
DateTime expireTime = new DateTime(now.getTime() + expiration * 1000);
|
||||
|
||||
Map<String, Object> payload = new HashMap<>();
|
||||
payload.put("userId", id);
|
||||
payload.put("created",now.getTime());
|
||||
return JWTUtil.createToken(payload,secret.getBytes());
|
||||
}
|
||||
|
||||
public boolean verifyToken(String token) {
|
||||
try{
|
||||
JWTUtil.verify(token,secret.getBytes());
|
||||
return true;
|
||||
}catch (Exception e){
|
||||
return false;
|
||||
}
|
||||
}
|
||||
public Long getUserIdFromToken(String token) {
|
||||
try {
|
||||
return (Long)JWTUtil.parseToken(token).getPayload("userId");
|
||||
}catch (Exception e){
|
||||
return null;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
Loading…
Reference in new issue