springmvc는 차단기의 대상을 컨트롤러나 서비스에 우아하게 전달합니다
2411 단어 JAVA
2. Threadlocal 스레드를 사용하여 응답을 요청하기 전에 같은 스레드에 있습니다.
예를 들어 로그인 차단기에서
preHandle
방법에서 로그인에 성공한 후 실행하기 전에user 대상을 controller나 서비스에 전송하려고 합니다새 클래스 LoginInterceptor
public class LoginInterceptor extends HandlerInterceptorAdapter {
private JwtProperties jwtProperties;
private JwtProperties jwtProperties;
// ,
private static final ThreadLocal tl = new ThreadLocal<>();
public LoginInterceptor(JwtProperties jwtProperties) {
this.jwtProperties = jwtProperties;
}
@Override
public boolean preHandle( HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// token
String token = CookieUtils.getCookieValue(request, jwtProperties.getCookieName());
if (StringUtils.isBlank(token)) {
// , 401
response.setStatus(HttpStatus.UNAUTHORIZED.value());
return false;
}
// token,
try {
// ,
UserInfo user = JwtUtils.getUserInfo(jwtProperties.getPublicKey(),token);
//
tl.set(user);
//request.setAttribute("user", user);
return true;
} catch (Exception e){
// , , 401
response.setStatus(HttpStatus.UNAUTHORIZED.value());
return false;
}
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
// ,
tl.remove();
}
public static UserInfo getLoginUser() {
return tl.get();
}
}
ThreadLocal
를 사용하여 조회된 사용자 정보를 저장하고 스레드 내에서 공유하기 때문에 요청이 도착하면 UserController
@Configuration
@EnableConfigurationProperties(JwtProperties.class)
public class MvcConfig implements WebMvcConfigurer {
@Autowired
private JwtProperties jwtProperties;
@Bean
public LoginInterceptor loginInterceptor() {
return new LoginInterceptor(jwtProperties);
}
@Override
public void addInterceptors(InterceptorRegistry registry) {
registry.addInterceptor(loginInterceptor()).addPathPatterns("/**");
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
JAVA 객체 작성 및 제거 방법정적 공장 방법 정적 공장 방법의 장점 를 반환할 수 있습니다. 정적 공장 방법의 단점 류 공유되거나 보호된 구조기를 포함하지 않으면 이불류화할 수 없음 여러 개의 구조기 파라미터를 만났을 때 구축기를 고려해야 한다...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.