Day 10
์ด์ ์ OAuth์์๋ถํฐ ์งํ
์ด๋
ธํ
์ด์
๊ธฐ๋ฐ์ผ๋ก ๊ฐ์
ํ๋ก๊ทธ๋๋ฐ์์ ์ฝ๋์ ๊ฐ์ ์ด ํ์ํ ๋๊ฐ ์๋ค(๋์์ฝ๋)
๋ํ์ ์ผ๋ก๋ : ๋ฐ๋ณต๋๋ ๊ฐ์ ์ฝ๋
์ฐ๋ฆฌ์์ฝ๋์์๋ IndexController์์์ ์ธ์ ๊ฐ์ ๊ฐ์ ธ์ค๋ ๋ถ๋ถ์ด ๋ฌธ์ ์
SessionUser user = (SessionUser)httpSession.getAttribute("user");
index ๋ฉ์๋ ์ธ์ ๋ค๋ฅธ ์ปจํธ๋กค๋ฌ์ ๋ฉ์๋์์ ์ธ์ ๊ฐ์ด ํ์ํ๋ฉด ๊ทธ ๋๋ง๋ค ์ง์ ์ธ์ ์์ ๊ฐ์ ๊ฐ์ ธ์์ผํจ
โ ๊ทธ๋์ ์ด ๋ถ๋ถ์ ๋ฉ์๋ ์ธ์๋ก ์ธ์ ๊ฐ์ ๋ฐ๋ก ๋ฐ์ ์ ์๋๋ก ํด๋ณด์
config.auth ํจํค์ง์ @LoginUser ์ด๋ ธํ ์ด์ ์ ์์ฑํ์
โ์๋ฐํ์ผ์์ Annotation์ ๋ง๋๋ ๊ณณ์ด ์๋๋ผ
src/main/java/com/kyu/book/springboot/config/auth/LoginUser
package com.kyu.book.springboot.config.auth;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface LoginUser {
}
@Target(ElementType.PARAMETER)
์ด ์ด๋ ธํ ์ด์ ์ด ์์ฑ๋ ์ ์๋ ์์น๋ฅผ ์ง์
PARAMETER๋ก ์ง์ ํ์ผ๋ ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ก ์ ์ธ๋ ๊ฐ์ฒด์์๋ง ์ฌ์ฉํ ์ ์์
์ด ์ธ์๋ ํด๋์ค ์ ์ธ๋ฌธ์์ ์ธ ์ ์๋ TYPE ๋ฑ์ด ์์
@interface
์ด ํ์ผ์ ์ด๋ ธํ ์ด์ ํด๋์ค๋ก ์ง์ ํ๋ค
LoginUser๋ผ๋ ์ด๋ ธํ ์ด์ ์ด ์์ฑ๋์๋ค๊ณ ์๊ฐํ๋ฉด ๋๋ค
๋ค์์ผ๋ก ๊ฐ์ ์์น์ LoginUserArgumentResolver๋ฅผ ์์ฑ
โHandlerMethodArgumentResolver ์ธํฐํ์ด์ค๋ฅผ ๊ตฌํํ ํด๋์ค
์กฐ๊ฑด์ ๋ง๋ ๊ฒฝ์ฐ ๋ฉ์๋๊ฐ ์๋ค๋ฉด HandlerMethodArgumentResolver์ ๊ตฌํ์ฒด๊ฐ ์ง์ ํ ๊ฐ์ผ๋ก ํด๋น ๋ฉ์๋์ ํ๋ผ๋ฏธํฐ๋ฅผ ๋๊ธธ ์ ์์
src/main/java/com/kyu/book/springboot/config/auth/LoginUserArgumentResolver
package com.kyu.book.springboot.config.auth;
import com.kyu.book.springboot.config.auth.dto.SessionUser;
import lombok.RequiredArgsConstructor;
import org.springframework.core.MethodParameter;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.support.WebDataBinderFactory;
import org.springframework.web.context.request.NativeWebRequest;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.method.support.ModelAndViewContainer;
import javax.servlet.http.HttpSession;
@RequiredArgsConstructor
@Component
public class LoginUserArgumentResolver implements HandlerMethodArgumentResolver {
private final HttpSession httpSession;
@Override
public boolean supportsParameter(MethodParameter parameter) {
boolean isLoginUserAnnotation = parameter.getParameterAnnotation(LoginUser.class) != null;
boolean isUserClass = SessionUser.class.equals(parameter.getParameterType());
return isLoginUserAnnotation && isUserClass;
}
@Override
public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {
return httpSession.getAttribute("user");
}
}
suppertsParameter()
์ปจํธ๋กค๋ฌ ๋ฉ์๋์ ํน์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ง์ํ๋์ง ํ๋จ
์ฌ๊ธฐ์๋ ํ๋ผ๋ฏธํฐ์ @LoginUser ์ด๋ ธํ ์ด์ ์ด ๋ถ์ด ์๊ณ , ํ๋ผ๋ฏธํฐ ํด๋์ค ํ์ ์ด SessionUser.class์ธ ๊ฒฝ์ฐ true๋ฅผ ๋ฐํ
resolveArgument()
ํ๋ผ๋ฏธํฐ์ ์ ๋ฌํ ๊ฐ์ฒด๋ฅผ ์์ฑํ๋ค
์ฌ๊ธฐ์๋ ์ธ์ ์์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์จ๋ค
โ์ฌ๊ธฐ๊น์ง๊ฐ @LoginUser๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํ ํ๊ฒฝ์ ๊ตฌ์ฑโ
์ด์ ๋ LoginUserArgumentResolver๊ฐ ์คํ๋ง์์ ์ธ์๋ ์ ์๋๋ก WebMvcConfigurer์ ์ถ๊ฐ
configํจํค์ง์ webConfig ํด๋์ค๋ฅผ ์์ฑํด์ ์ค์ ์ถ๊ฐ
src/main/java/com/kyu/book/springbook/config/WebConfig
package com.kyu.book.springboot.config;
import com.kyu.book.springboot.config.auth.LoginUserArgumentResolver;
import lombok.RequiredArgsConstructor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
import java.util.List;
@RequiredArgsConstructor
@Configuration
public class WebConfig implements WebMvcConfigurer {
private final LoginUserArgumentResolver loginUserArgumentResolver;
@Override
public void addArgumentResolvers(List<HandlerMethodArgumentResolver> argumentResolvers){
argumentResolvers.add(loginUserArgumentResolver);
}
}
HandlerMethodArgumentResolver๋ ํญ์ WebMvcConfigurer์ addArgumentResolvers()๋ฅผ ํตํด์ ํญ์ ์ถ๊ฐํด์ผํ๋ค.
๋ค๋ฅธ HandlerMethodArgumentResolver๊ฐ ํ์ํ๋ค๋ฉด ๊ฐ์ ๋ฐฉ์์ผ๋ก ์ถ๊ฐํด์ฃผ๋ฉด ๋๋ค
โ์ด๊ฑธ๋ก ๋ชจ๋ ์ค์ ์ด ๋๋ฌ์ผ๋๊น IndexController์ ์ฝ๋์์ ๋ฐ๋ณต๋๋ ๋ถ๋ถ์ ๋ชจ๋ @LoginUser๋ก ๊ฐ์
src/main/java/com/kyu/book/springboot/web/dto/IndexController
private final PostsService postsService;
@GetMapping("/")
public String index(Model model, @LoginUser SessionUser user){
model.addAttribute("posts", postsService.findAllDesc());
if(user != null){
model.addAttribute("userName", user.getName());
}
return "index";
}
@LoginUser Session user
๊ธฐ์กด์ (User)httpSession.getAttribute("user")๋ก ๊ฐ์ ธ์ค๋ ์ธ์ ์ ๋ณด ๊ฐ์ ์ด์ ๊ทธ ๋ฐฉ์์ ์ฌ์ฉํ์ง ์์๋ ๊ฐ๋ฅ
์ด์ ๋ ์ด๋ ์ปจํธ๋กค๋ฌ๋ ์ง @LoginUser๋ง์ ์ฌ์ฉํ๊ฒ๋๋ฉด ์ธ์ ์ ์ ๋ณด๋ฅผ ๊ฐ์ ธ์์ ์ฌ์ฉํ ์ ์๋ค
Last updated
Was this helpful?