1 package hu.elte.tribus.sf; 2 3 import java.io.IOException; 4 5 import hu.elte.tribus.interfaces.UserTracker; 6 import hu.elte.tribus.util.AuthUtil; 7 8 import javax.servlet.Filter; 9 import javax.servlet.FilterChain; 10 import javax.servlet.FilterConfig; 11 import javax.servlet.ServletContext; 12 import javax.servlet.ServletException; 13 import javax.servlet.ServletRequest; 14 import javax.servlet.ServletResponse; 15 import javax.servlet.http.HttpServletRequest; 16 import javax.servlet.http.HttpSession; 17 18 import org.springframework.context.ApplicationContext; 19 import org.springframework.transaction.PlatformTransactionManager; 20 import org.springframework.transaction.TransactionStatus; 21 import org.springframework.transaction.support.TransactionCallback; 22 import org.springframework.transaction.support.TransactionTemplate; 23 import org.springframework.web.context.support.WebApplicationContextUtils; 24 25 public class SessionFilter implements Filter { 26 27 private ServletContext context = null; 28 29 public void doFilter(final ServletRequest request, final ServletResponse response, final FilterChain chain) throws IOException, ServletException 30 { 31 final ApplicationContext applicationContext = WebApplicationContextUtils.getWebApplicationContext(context); 32 final UserTracker tracker = (UserTracker) applicationContext.getBean("userTracker"); 33 PlatformTransactionManager transactionManager = (PlatformTransactionManager) applicationContext.getBean("txManager"); 34 new TransactionTemplate(transactionManager).execute(new TransactionCallback(){ 35 36 public Object doInTransaction(TransactionStatus arg0) { 37 HttpSession session = ((HttpServletRequest)request).getSession(true); 38 session = ((HttpServletRequest)request).getSession(); 39 if(session.getAttribute("counted") == null && AuthUtil.getCurentUserName() != null) 40 { 41 session.setAttribute("counted", Boolean.TRUE); 42 session.setAttribute("remoteuser", AuthUtil.getCurentUserName()); 43 tracker.userLoggedIn(AuthUtil.getCurentUserName()); 44 } 45 return null; 46 }}); 47 chain.doFilter(request, response); 48 } 49 50 public void init(FilterConfig filterConfig) 51 { 52 context = filterConfig.getServletContext(); 53 } 54 55 public void destroy() { 56 } 57 }