package org.xcolab.view.auth.resolver; import org.springframework.core.MethodParameter; import org.springframework.util.Assert; import org.springframework.web.bind.support.WebArgumentResolver; 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 org.xcolab.client.members.pojo.Member; import org.xcolab.view.auth.AuthenticationContext; import javax.servlet.http.HttpServletRequest; public class MemberArgumentResolver implements HandlerMethodArgumentResolver { private final AuthenticationContext authenticationContext; public MemberArgumentResolver(AuthenticationContext authenticationContext) { Assert.notNull(authenticationContext, "AuthenticationContext required"); this.authenticationContext = authenticationContext; } @Override public boolean supportsParameter(MethodParameter methodParameter) { return methodParameter.getParameterType().equals(Member.class); } @Override public Object resolveArgument(MethodParameter methodParameter, ModelAndViewContainer mavContainer, NativeWebRequest webRequest, WebDataBinderFactory binderFactory) { if (this.supportsParameter(methodParameter)) { final HttpServletRequest request = (HttpServletRequest) webRequest.getNativeRequest(); RealMember realMemberAnnotation = methodParameter.getParameterAnnotation(RealMember.class); if (realMemberAnnotation != null) { return authenticationContext.getRealMemberOrNull(); } return authenticationContext.getMemberOrNull(request); } else { return WebArgumentResolver.UNRESOLVED; } } }