package ca.uhn.fhir.jpa.demo.interceptor;
import javax.persistence.EntityManager;
import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.Propagation;
import org.springframework.transaction.annotation.Transactional;
import ca.uhn.fhir.jpa.demo.entity.User;
import ca.uhn.fhir.rest.server.interceptor.InterceptorAdapter;
public class RequestAuthorizationInterceptor extends InterceptorAdapter {
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(RequestAuthorizationInterceptor.class);
@PersistenceContext()
private EntityManager myEntityManager;
@Autowired
private PlatformTransactionManager myPlatformTransactionManager;
@Transactional(propagation = Propagation.REQUIRED)
@Override
public boolean incomingRequestPreProcessed(HttpServletRequest theRequest, HttpServletResponse theResponse) {
String authorization = theResponse.getHeader("Authorization");
TypedQuery<User> q = myEntityManager.createQuery("SELECT u FROM User u WHERE u.myUsername = :username", User.class);
String username = authorization;
q.setParameter("username", username);
try {
User user = q.getSingleResult();
ourLog.info("Found user [{}]: {}", username, user);
} catch (NoResultException e) {
ourLog.info("No user found in user table with username [{}]", username);
}
return true;
}
}