package gw.servlet uses com.guidewire.pl.system.dependency.PLDependencies uses com.guidewire.pl.system.service.context.ServiceToken uses java.lang.Throwable uses gw.api.util.Logger uses javax.servlet.http.HttpServlet uses javax.servlet.http.HttpServletRequest uses javax.servlet.http.HttpServletResponse @ReadOnly abstract class AbstractGWAuthServlet extends HttpServlet { override protected function service(req : HttpServletRequest, resp : HttpServletResponse) { var tokenStr = authenticate( req ) var token : ServiceToken try { token = PLDependencies.getServiceTokenManager().unlockToken( tokenStr ) } catch (e : Throwable) { // ignored Logger.logDebug(e.toString()) token = null } if (token == null && !isAuthenticationRequired( req )) { token = PLDependencies.getServiceTokenManager().createUnauthenticatedToken() } if (token == null) { invalidAuthentication(req, resp) } else { PLDependencies.getCommonDependencies().setServiceToken(token) try { super.service( req, resp ) } finally { var newToken = PLDependencies.getCommonDependencies().getServiceToken() if (newToken.isAuthenticatedUser()) { storeToken(req, newToken.SessionID) } else { PLDependencies.getServiceTokenManager().removeToken(token) } PLDependencies.getCommonDependencies().setServiceToken(null) } } } protected function logout(req : HttpServletRequest) { var newToken = PLDependencies.getCommonDependencies().getServiceToken() PLDependencies.getServiceTokenManager().removeToken(newToken) storeToken(req, newToken.SessionID) } abstract protected function isAuthenticationRequired(req : HttpServletRequest) : boolean abstract protected function authenticate(req : HttpServletRequest) : String abstract protected function storeToken(req : HttpServletRequest, token : String) abstract protected function invalidAuthentication(req : HttpServletRequest, resp : HttpServletResponse) }