contact: ttasjwi920@gmail.com
Posts
Q&A
Naver Login์ ๊ถํ์ ๋ํด ์ง๋ฌธ์ด ์์ต๋๋ค
๋ค์ด๋ฒ์์ access token ์๋ต์ผ๋ก scope๋ฅผ ์ ๋ฃ์ด์ฃผ๋ค์...keycloak, google์ ๋ฃ์ด์ฃผ๋๋ฐ ๋ง์ด์ฃ .์ค์ ์ก์ธ์คํ ํฐ์ ๊ฐ๊ณ ์ค๋ ๋ถ๋ถ์์ ์๋ต์ scope๋ฅผ ์ฝ๊ณ ์ก์ธ์คํ ํฐ ๊ฐ์ฒด๋ฅผ ์์ฑํ๊ณ ์ด scope๋ค์ ๊ธฐ๋ฐ์ผ๋ก OidcUserSErvice๋ DefaultOAuth2UserSErvice๋ scope ๊ฐ์ ์ฌ์ฉํด์ ๊ถํ์ ๋ง๋๋๋ฐ ๊ทธ ๊ณผ์ ์์ ๊ถํ์ด ํ๋๋ ๋ง๋ค์ด์ง์ง ์๊ธฐ ๋๋ฌธ์ ๋ฌธ์ ๊ฐ ์๊ธด๊ฒ ๊ฐ์ต๋๋ค.
- 0
- 2
- 524
Q&A
Controller์ Authenticationํ์ ํ๋ผ๋ฏธํฐ๋ฅผ ์ฃผ์ ํ๋ HandlerMethodArgumentResolver์ ๊ตฌํ์ฒด๊ฐ ๋ฌด์์ธ๊ฐ์?
์ ๋ ์ด๊ฒ ๊ถ๊ธํด์ ๋๋ฒ๊ฑฐ๋ฅผ ๊ฑธ์ด๋ดค๋๋ฐ์public class HandlerMethodArgumentResolverComposite implements HandlerMethodArgumentResolver { private final List argumentResolvers = new ArrayList(); @Override @Nullable public Object resolveArgument(MethodParameter parameter, @Nullable ModelAndViewContainer mavContainer, NativeWebRequest webRequest, @Nullable WebDataBinderFactory binderFactory) throws Exception { HandlerMethodArgumentResolver resolver = getArgumentResolver(parameter); if (resolver == null) { throw new IllegalArgumentException("Unsupported parameter type [" + parameter.getParameterType().getName() + "]. supportsParameter should be called first."); } return resolver.resolveArgument(parameter, mavContainer, webRequest, binderFactory); } ๋์คํจ์ฒ ์๋ธ๋ฆฟ์์ HandlerAdapter ๋ก ํธ๋ค๋ฌ ์ฒ๋ฆฌ๋ฅผ ์์ํ๊ณ (RequestMappingHandlerResolver) ์ญ ํ๊ณ ๊ฐ๋ค๋ณด๋ฉดHandlerMethodArgumentResolverComposite ๋ก ์ฌ ์ ์์ต๋๋ค. ์ฐ๋ฆฌ ๋ฉ์๋์ arugment๋ฅผ ์ค์ resolve ํ๋ argument REsolver๊ฐ ๋์ค๋ ์ง์ ์ breakpoint๋ฅผ ๊ฑธ๊ณ ํ์ธํด๋ดค์ด์.public class ServletRequestMethodArgumentResolver implements HandlerMethodArgumentResolver { @Override public boolean supportsParameter(MethodParameter parameter) { Class paramType = parameter.getParameterType(); return (WebRequest.class.isAssignableFrom(paramType) || ServletRequest.class.isAssignableFrom(paramType) || MultipartRequest.class.isAssignableFrom(paramType) || HttpSession.class.isAssignableFrom(paramType) || PushBuilder.class.isAssignableFrom(paramType) || (Principal.class.isAssignableFrom(paramType) && !parameter.hasParameterAnnotations()) || InputStream.class.isAssignableFrom(paramType) || Reader.class.isAssignableFrom(paramType) || HttpMethod.class == paramType || Locale.class == paramType || TimeZone.class == paramType || ZoneId.class == paramType); }ServletRequestMethodArgumentResolver ์ฌ๊ธฐ์ ํ๋ผ๋ฏธํฐ์ ์ด๋ ธํ ์ด์ ์ด ์๋ Principal ์ ์ก์ ์ฒ๋ฆฌํ๋ค์!else if (Principal.class.isAssignableFrom(paramType)) { Principal userPrincipal = request.getUserPrincipal(); if (userPrincipal != null && !paramType.isInstance(userPrincipal)) { throw new IllegalStateException( "Current user principal is not of type [" + paramType.getName() + "]: " + userPrincipal); } return userPrincipal; }resolveArgument ๋ฉ์๋์ ๊ฐ๋ณด๋ฉด request(์์ฒญ๊ฐ์ฒด) ์์ getPrincipal ์ ํ๊ณ ๊ทธ๊ฒ์ ๋ฐํํ๋ ๊ตฌ์กฐ๋ก ๋์ด ์๋ค์.๊ทธ๋ฆฌ๊ณ ์์ฑ์๋๊ป์ ์ธ๊ธํ์ SecurityContextHolderAwareRequestWrapper ์ชฝ์ ๊ฐ๋ณด๋ฉด private Authentication getAuthentication() { Authentication auth = this.securityContextHolderStrategy.getContext().getAuthentication(); return (this.trustResolver.isAuthenticated(auth)) ? auth : null; }์ด request ๊ฐ์ฒด๊ฐ securityContextHolderStrategy ๋ฅผ ํตํด authentication ์ ์ฐพ์ ๋ฐํํ๋ ๊ตฌ์กฐ๋ก ๋์ด์์ด์.
- 1
- 2
- 722
Q&A
๊ฐ์ฌ๋ ๋ช์ผ๋์ ๊ตฌ๊ธ ๊ฒ์๋ง 100๊ฐ ํ๋๋ฐ๋ ์ด์ ๋ฅผ ๋ชจ๋ฅด๊ฒ ์ต๋๋ค..
https://www.inflearn.com/questions/1062616/%EC%B5%9C%EC%8B%A0-%EC%8A%A4%ED%94%84%EB%A7%81-%EC%8B%9C%ED%81%90%EB%A6%AC%ED%8B%B0-ajax-%EB%A1%9C%EA%B7%B8%EC%9D%B8-%EC%8B%9C%EB%8F%84-%EC%8B%9C-%EC%BF%A0%ED%82%A4%EA%B0%80-%EC%98%A4%EC%A7%80-%EC%95%8A%EC%9D%84-%EB%95%8C-%EC%82%BD%EC%A7%88-%EA%B8%B0%EB%A1%9D์ ์ ์ ๊ฐ ์ฝ์งํ ๊ธฐ๋ก์ด ์๋๋ฐ ์ด๊ธ ๋ณด์๋ฉด ๋ ๊ฒ ๊ฐ์์
- 1
- 2
- 385
Q&A
private final ObjectProvider<Mylogger> myLoggerProvider
(์ฌ์ง) (์ฌ์ง) - MyLogger ์์ฑ์ @RequiredArgsConstructor ์ด๋ ธํ ์ด์ ์ ํด๋์ค์ ๋ฌ์์ผ๋ฏ๋ก ์์ฑ์๊ฐ ์๋์ผ๋ก ์์ฑ๋ฉ๋๋ค. (์ค์ ์ปดํ์ผ ํ classํ์ผ์์๋ ์์ฑ์๊ฐ ์ถ๊ฐ๋์ด ์์) - ์์ฑ์๊ฐ ํ๋๋ฟ์ผ๋๋ ๋ณ๋๋ก @Autowired ์ด๋ ธํ ์ด์ ์ ๋ถ์ด์ง ์์๋ ์๋์ผ๋ก ์์กด์ฑ ์ฃผ์ ์ด ๋ฉ๋๋ค. (์ฌ์ง) (์ฌ์ง) ๋ฉ์ธ(SpringBoot ์์๋ถ)์ ์คํํ๋ฉด ์ฐ์ ์ปจํ ์ด๋๋ฅผ ์์ฑํ๊ณ ์ปดํฌ๋ํธ ์ค์บ์ ํฉ๋๋ค. ์ด ๊ณผ์ ์์ Configuration์ ๋น๋กฏํ ๋น๋ค์ด ์ญ๋ฅด๋ฅต ์์ฑ๋๊ฒ ์ฃ ? @Service ์ด๋ ธํ ์ด์ ๋ ๋ด๋ถ์ ์ผ๋ก๋ @Component ์ด๋ ธํ ์ด์ ์ด ์์ผ๋ ์ปดํฌ๋ํธ ์ค์บ์ ๋์์ด ๋ฉ๋๋ค. (์์ ์๋ฐ์์๋ ์ด๋ ธํ ์ด์ ์ ์์๊ฐ์ ๊ฐ๋ ์ด ์์ง๋ง, ์คํ๋ง์์ ๊ด๋ฆฌ๋๋ ์ด๋ ธํ ์ด์ ๋ค์ ์ด๋ ๊ฒ ๋ด๋ถ์ ์ผ๋ก ๋ถ์ด์๋ ์ด๋ ธํ ์ด์ ์ ์ฐธ์กฐํ๋ ๊ฒ์ผ๋ก ์๊ณ ์์ต๋๋ค.) ์ด๋ ๊ฒ ์ฑ๊ธํค ๋น๋ค์ด ์์ฑ๋ฉ๋๋ค. ์ด ์์ฑ๊ณผ์ ์์, LogDemoService์ ์์ฑ์๋ฅผ ํธ์ถํ๋ ๊ณผ์ ์์ ์์กด๊ด๊ณ์ ํด๋นํ๋ ๋ค๋ฅธ ๋น๋ค๋ ์์ฑํด์ ์ฃผ์ ํ๊ฒ ๋ฉ๋๋ค. ์ด๋๋ ์คํ๋ง ๋ด๋ถ์ ์ธ ๋ก์ง์ ์ํด์ ObjectProvider ์ธํฐํ์ด์ค์ ๊ตฌํ์ฒด๊ฐ ์์ฑ๋์ด ์ฃผ์ ๋ ๊ฒ๋๋ค. ์ด๋ MyLogger์ ๋น ์ค์ฝํ๋ request ์ค์ฝํ๋ฅผ ๋ฐ๋ฅด๋ฏ๋ก, ์์ฑ๋์ง ์์ต๋๋ค. ์ดํ ๋น๋ค์ ์์กด๊ด๊ณ๊ฐ ์ฃผ์ ๋๊ณ ๋น ์ด๊ธฐํ๋ค์ด ์ผ์ด๋๊ณ ... ์คํ๋ง ์น ์ดํ๋ฆฌ์ผ์ด์ ์ด ์ ์์ ์ผ๋ก ์คํ์ด ๋ฉ๋๋ค. ์ด์ http์์ log-demo ์์ฒญ์ด ๋ค์ด์ต๋๋ค. (์ฌ์ง) controller์ request๊ฐ ๋ค์ด์ค๊ณ , myLoggerProvider์๊ฒ MyLogger ๋น์ ์์ฒญํฉ๋๋ค. MyLogger์ด ์์ต๋๋ค. ์ด ๋ myLoggerProvider๋ request์ ๋์ํ๋ MyLogger์ ์ปจํธ๋กค๋ฌ์๊ฒ ์์ฒญํ๊ณ ์ปจํธ๋กค๋ฌ๋ ์ด๋ฅผ ์์ฑํ๊ณ , ๋น ์ค์ฝํ์ ๋ง๊ฒ ์์ฒญ์ด ๋๋ ๋๊น์ง ์ด ๋น์ ๋ผ์ดํ ์ฌ์ดํด์ ๊ด๋ฆฌํด์ค๋๋ค. ---- ์ ๋ ์ด ๋ถ๋ถ์ ํ์ตํ๊ณ ์๋๋ฐ ์ ๊ฐ ์ดํดํ๊ณ ์๋ ๊ฒ์ ๊ธฐ๋ฐ์ผ๋ก ๋ต๋ณํด๋ด ๋๋ค... ํ๋ฆด ์ ์์ผ๋ ์ํด ๋ถํ๋๋ฆฝ๋๋ค.
- 0
- 1
- 286