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;
}
}