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