package kr.co.inger.hotwind.request_check.session; import java.lang.reflect.Type; import javax.servlet.http.HttpServletRequest; import javax.ws.rs.core.Context; import javax.ws.rs.ext.Provider; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.sun.jersey.core.spi.component.ComponentContext; import com.sun.jersey.core.spi.component.ComponentScope; import com.sun.jersey.spi.inject.Injectable; import com.sun.jersey.spi.inject.InjectableProvider; /** * Context으로 지정된 메서드 인자중 AccessTokenedSession을 주입한다능. * * classpath:/META-INF/services/com.sun.jersey.spi.inject.InjectableProvider 파일에 * 이 클래스의 FQN을 한줄 입력해놓아야 Jersey이 검색해서 붙이므로 주의. * * @author jhyun * @since 2013-Aug-14-Wed */ @Provider public class AccessTokenedSessionProvider implements Injectable<AccessTokenedSession>, InjectableProvider<Context, Type> { @Context private HttpServletRequest request; public static final String SESSION_SAVE_KEY = "hotwind-session"; private Logger logger = LoggerFactory .getLogger(AccessTokenedSessionProvider.class); @Override public Injectable getInjectable(ComponentContext cc, Context a, Type t) { if (t.equals(AccessTokenedSession.class)) { return this; } else return null; } @Override public ComponentScope getScope() { return ComponentScope.PerRequest; } @Override public AccessTokenedSession getValue() { AccessTokenedSession ats = null; if (request.getAttribute(SESSION_SAVE_KEY) == null) { ats = new AccessTokenedSession(); request.setAttribute(SESSION_SAVE_KEY, ats); } else { ats = (AccessTokenedSession) request.getAttribute(SESSION_SAVE_KEY); } // return ats; } }