Author: ssmiweve
Date: 2008-01-24 12:01:04 +0100 (Thu, 24 Jan 2008)
New Revision: 6032
Added:
tags/beta-deployments/200801241201-sesat-kernel/
tags/beta-deployments/200801241201-sesat-kernel/war/src/main/java/no/sesat/search/http/filters/UserFilter.java
Removed:
tags/beta-deployments/200801241201-sesat-kernel/war/src/main/java/no/sesat/search/http/filters/UserFilter.java
Log:
sesat beta deployment
Copied: tags/beta-deployments/200801241201-sesat-kernel (from rev 6030,
branches/2.16)
Deleted:
tags/beta-deployments/200801241201-sesat-kernel/war/src/main/java/no/sesat/search/http/filters/UserFilter.java
===================================================================
---
branches/2.16/war/src/main/java/no/sesat/search/http/filters/UserFilter.java
2008-01-23 21:19:34 UTC (rev 6030)
+++
tags/beta-deployments/200801241201-sesat-kernel/war/src/main/java/no/sesat/search/http/filters/UserFilter.java
2008-01-24 11:01:04 UTC (rev 6032)
@@ -1,298 +0,0 @@
-/* Copyright (2007) Schibsted Søk AS
- * This file is part of SESAT.
- *
- * SESAT is free software: you can redistribute it and/or modify
- * it under the terms of the GNU Affero General Public License as published
by
- * the Free Software Foundation, either version 3 of the License, or
- * (at your option) any later version.
- *
- * SESAT is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU Affero General Public License for more details.
- *
- * You should have received a copy of the GNU Affero General Public License
- * along with SESAT. If not, see <http://www.gnu.org/licenses/>.
- *
- * UserFilter.java
- *
- * Created on 9 March 2007, 15:25
- */
-package no.sesat.search.http.filters;
-
-import java.io.IOException;
-import java.util.Date;
-import java.util.Properties;
-import javax.naming.InitialContext;
-import javax.naming.NamingException;
-import javax.servlet.Filter;
-import javax.servlet.FilterChain;
-import javax.servlet.FilterConfig;
-import javax.servlet.ServletException;
-import javax.servlet.ServletRequest;
-import javax.servlet.ServletResponse;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-import javax.servlet.http.HttpSession;
-import no.sesat.search.user.BasicUser;
-import no.sesat.search.user.exception.InvalidTokenException;
-import no.sesat.search.user.service.BasicUserService;
-import no.sesat.search.user.service.UserCookieUtil;
-import no.sesat.search.datamodel.DataModel;
-import no.sesat.search.site.config.SiteConfiguration;
-import no.sesat.search.user.service.BasicUserService;
-import org.apache.log4j.Logger;
-
-/**
- * Responsible for Persistent User Login. Or "Remember Me" functionality.
Based off
- *
http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice
- *
- * @author <a href="mailto:[EMAIL PROTECTED]">Endre Midtgård Meckelborg</a>
- * @author <a href="mailto:[EMAIL PROTECTED]">Mck</a>
- * @version <tt>$Id$</tt>
- */
-public final class UserFilter implements Filter {
-
- // Constants -----------------------------------------------------
-
- private static final Logger LOG = Logger.getLogger(UserFilter.class);
-
- // Attributes ----------------------------------------------------
-
- // Static --------------------------------------------------------
-
- // Constructors --------------------------------------------------
-
- /** Default constructor. */
- public UserFilter() {
- super();
- }
-
- // Public --------------------------------------------------------
-
- /**
- * The filter action method.
- *
- * @param request The servlet request we are processing
- * @param response The servlet response for the request
- * @param chain The filter chain we are processing
- * @exception IOException Thrown if an input/output error occurs
- * @exception ServletException Thrown if a servlet error occurs
- */
- public void doFilter(
- final ServletRequest request,
- final ServletResponse response,
- final FilterChain chain) throws IOException, ServletException {
-
- if (request instanceof HttpServletRequest) {
- initialiseUserCookie((HttpServletRequest) request,
(HttpServletResponse) response);
- performAutomaticLogin((HttpServletRequest) request,
(HttpServletResponse) response);
-
- }
- chain.doFilter(request, response);
- }
-
- /**
- * Destroy method for this filter.
- */
- public void destroy() {
- }
-
-
- /**
- * Init method for this filter.
- *
- * @param filterConfig the filter configuration
- */
- public void init(final FilterConfig filterConfig) {
- }
-
- // Package protected ---------------------------------------------
-
- // Protected -----------------------------------------------------
-
- // Private -------------------------------------------------------
-
- /**
- * Method that populate the user datamodel if no user is set and there
exists a login cookie.
- *
- * @param request The servlet request we are processing
- * @param response The servlet response for the request
- */
- private static void performAutomaticLogin(final HttpServletRequest
request, final HttpServletResponse response) {
-
- final HttpSession session = request.getSession();
- final DataModel datamodel = (DataModel)
session.getAttribute(DataModel.KEY);
-
- final BasicUserService basicUserService =
getBasicUserService(datamodel);
-
- if (null != basicUserService) {
-
- final String loginKey = UserCookieUtil.getUserLoginCookie(request);
- final boolean isLegalLoginKey =
basicUserService.isLegalLoginKey(loginKey);
-
- final BasicUser user = datamodel.getUser().getUser();
- final Date updateTimestamp =
UserCookieUtil.getUserUpdateCookie(request);
-
- final boolean actionLogout =
"logout".equals(request.getParameter("action"));
-
- if (user == null && isLegalLoginKey) {
-
- // Login if no user and a legal login key.
- loginUsingCookie(loginKey, datamodel, basicUserService,
response);
-
- } else if (user != null && (actionLogout || !isLegalLoginKey)) {
-
- // Check if the user should be logged out, no login key
anymore.
- logout(datamodel, basicUserService, response);
-
- // Remove the logout from the url to prevent problems with
sesamBackUrl.
- if (actionLogout) {
- final String strippedUrl = request.getRequestURL() + "?"
- + request.getQueryString().substring(0,
request.getQueryString().indexOf("&action"));
- redirect(strippedUrl, response);
- }
-
- } else if (user != null && isLegalLoginKey) {
- if (!isLoginKeyLegalForUser(loginKey, user)) {
-
- // Check if the logged in user is the one found in the
login key
- logout(datamodel, basicUserService, response);
- loginUsingCookie(loginKey, datamodel, basicUserService,
response);
-
- } else if (user.isDirty(updateTimestamp)) {
-
- // Check if the user object is dirty, refresh if needed.
- LOG.info("Logged in user dirty, refreshes: " +
user.getUsername());
-
datamodel.getUser().setUser(basicUserService.refreshUser(user));
- }
- }
-
- }else{
-
- LOG.warn("Couldn't find the basic user service.");
- return;
- }
- }
-
- /**
- * Initializing the personalization session from the login key.
- *
- * @param loginKey the login key used for login
- * @param datamodel the data model
- * @param userService the user service
- * @param response the request response
- */
- private static void loginUsingCookie(
- final String loginKey,
- final DataModel datamodel,
- final BasicUserService basicUserService,
- final HttpServletResponse response) {
-
- LOG.info("Login user with login key: " + loginKey);
-
- try {
- final BasicUser user =
basicUserService.authenticateByLoginKey(loginKey);
-
- if (null != user) {
-
- datamodel.getUser().setUser(user);
-
- // Updates the login cookie.
- UserCookieUtil.setUserLoginCookie(response,
user.getNextLoginKey());
- }
- } catch (final InvalidTokenException e) {
- // TODO: Give message to user?
- LOG.warn("Invalid token in login key: " + loginKey);
- datamodel.getUser().setUser(null);
- UserCookieUtil.setUserLoginCookieDefault(response);
- }
- }
-
- /**
- * Method used to reset a session totally.
- *
- * @param datamodel the datamodel
- * @param userService the user service
- * @param response the request response
- */
- private static void logout(
- final DataModel datamodel,
- final BasicUserService userService,
- final HttpServletResponse response) {
-
- final BasicUser user = datamodel.getUser().getUser();
- LOG.info("Logout: " + user.getUsername());
-
- if (userService.isLegalLoginKey(user.getNextLoginKey())) {
- userService.invalidateLogin(user.getNextLoginKey());
- }
-
- UserCookieUtil.setUserLoginCookieDefault(response);
- datamodel.getUser().setUser(null);
- }
-
- /**
- * Place a cookie into the response so any subsequent requests can trust
that cookies are enabled.
- *
- * @param request The servlet request we are processing
- * @param response The servlet response for the request
- */
- private static void initialiseUserCookie(final HttpServletRequest request,
final HttpServletResponse response) {
-
- if (null == UserCookieUtil.getUserLoginCookie(request)) {
-
- // The user is not logged in.
- // Place the cookie, so we can test that cookies are enabled.
- UserCookieUtil.setUserLoginCookieDefault(response);
- }
- }
-
- private static boolean isLoginKeyLegalForUser(final String loginKey, final
BasicUser user) {
-
- // The user id in the login key must be the same as in the user object.
- return user.getUserId().toString().equals(
- loginKey.substring(0,
loginKey.indexOf(BasicUserService.LOGIN_KEY_SEPARATOR)));
- }
-
- private static void redirect(final String url, final HttpServletResponse
response) {
-
- try {
- response.sendRedirect(url);
-
- } catch (final IOException e) {
- LOG.error(e);
- }
- }
-
- /**
- * Return the basic user service used for personalization.
- *
- * @param datamodel the data model
- * @return the user service
- */
- private static BasicUserService getBasicUserService(final DataModel
datamodel) {
-
- // lookup the ejb3-client service
- final SiteConfiguration siteConf =
datamodel.getSite().getSiteConfiguration();
- final String url =
siteConf.getProperty("schibstedsok_remote_service_url");
- final String jndi = siteConf.getProperty("user_service_jndi_name");
-
- LOG.debug("Url: " + url);
- LOG.debug("JndiName: " + jndi);
-
- final Properties properties = new Properties();
- properties.put("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
- properties.put("java.naming.factory.url.pkgs",
"org.jboss.naming:org.jnp.interfaces");
- properties.put("java.naming.provider.url", url);
-
- try {
- return (BasicUserService) new
InitialContext(properties).lookup(jndi);
-
- } catch (final NamingException ne) {
- LOG.error(ne.getMessage(), ne);
- return null;
- }
- }
-
-}
Copied:
tags/beta-deployments/200801241201-sesat-kernel/war/src/main/java/no/sesat/search/http/filters/UserFilter.java
(from rev 6031,
branches/2.16/war/src/main/java/no/sesat/search/http/filters/UserFilter.java)
===================================================================
---
tags/beta-deployments/200801241201-sesat-kernel/war/src/main/java/no/sesat/search/http/filters/UserFilter.java
(rev 0)
+++
tags/beta-deployments/200801241201-sesat-kernel/war/src/main/java/no/sesat/search/http/filters/UserFilter.java
2008-01-24 11:01:04 UTC (rev 6032)
@@ -0,0 +1,299 @@
+/* Copyright (2007) Schibsted Søk AS
+ * This file is part of SESAT.
+ *
+ * SESAT is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * SESAT is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with SESAT. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * UserFilter.java
+ *
+ * Created on 9 March 2007, 15:25
+ */
+package no.sesat.search.http.filters;
+
+import java.io.IOException;
+import java.util.Date;
+import java.util.Properties;
+import javax.naming.InitialContext;
+import javax.naming.NamingException;
+import javax.servlet.Filter;
+import javax.servlet.FilterChain;
+import javax.servlet.FilterConfig;
+import javax.servlet.ServletException;
+import javax.servlet.ServletRequest;
+import javax.servlet.ServletResponse;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import javax.servlet.http.HttpSession;
+import no.sesat.search.user.BasicUser;
+import no.sesat.search.user.exception.InvalidTokenException;
+import no.sesat.search.user.service.BasicUserService;
+import no.sesat.search.user.service.UserCookieUtil;
+import no.sesat.search.datamodel.DataModel;
+import no.sesat.search.site.config.SiteConfiguration;
+import no.sesat.search.user.service.BasicUserService;
+import org.apache.log4j.Logger;
+
+/**
+ * Responsible for Persistent User Login. Or "Remember Me" functionality.
Based off
+ *
http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice
+ *
+ * @author <a href="mailto:[EMAIL PROTECTED]">Endre Midtgård Meckelborg</a>
+ * @author <a href="mailto:[EMAIL PROTECTED]">Mck</a>
+ * @version <tt>$Id$</tt>
+ */
+public final class UserFilter implements Filter {
+
+ // Constants -----------------------------------------------------
+
+ private static final Logger LOG = Logger.getLogger(UserFilter.class);
+
+ // Attributes ----------------------------------------------------
+
+ // Static --------------------------------------------------------
+
+ // Constructors --------------------------------------------------
+
+ /** Default constructor. */
+ public UserFilter() {
+ super();
+ }
+
+ // Public --------------------------------------------------------
+
+ /**
+ * The filter action method.
+ *
+ * @param request The servlet request we are processing
+ * @param response The servlet response for the request
+ * @param chain The filter chain we are processing
+ * @exception IOException Thrown if an input/output error occurs
+ * @exception ServletException Thrown if a servlet error occurs
+ */
+ public void doFilter(
+ final ServletRequest request,
+ final ServletResponse response,
+ final FilterChain chain) throws IOException, ServletException {
+
+ if (request instanceof HttpServletRequest) {
+ initialiseUserCookie((HttpServletRequest) request,
(HttpServletResponse) response);
+ performAutomaticLogin((HttpServletRequest) request,
(HttpServletResponse) response);
+
+ }
+ chain.doFilter(request, response);
+ }
+
+ /**
+ * Destroy method for this filter.
+ */
+ public void destroy() {
+ }
+
+
+ /**
+ * Init method for this filter.
+ *
+ * @param filterConfig the filter configuration
+ */
+ public void init(final FilterConfig filterConfig) {
+ }
+
+ // Package protected ---------------------------------------------
+
+ // Protected -----------------------------------------------------
+
+ // Private -------------------------------------------------------
+
+ /**
+ * Method that populate the user datamodel if no user is set and there
exists a login cookie.
+ *
+ * @param request The servlet request we are processing
+ * @param response The servlet response for the request
+ */
+ private static void performAutomaticLogin(final HttpServletRequest
request, final HttpServletResponse response) {
+
+ final HttpSession session = request.getSession();
+ final DataModel datamodel = (DataModel)
session.getAttribute(DataModel.KEY);
+
+ final BasicUserService basicUserService =
getBasicUserService(datamodel);
+
+ if (null != basicUserService) {
+
+ final String loginKey = UserCookieUtil.getUserLoginCookie(request);
+ final boolean isLegalLoginKey =
basicUserService.isLegalLoginKey(loginKey);
+
+ final BasicUser user = datamodel.getUser().getUser();
+ final Date updateTimestamp =
UserCookieUtil.getUserUpdateCookie(request);
+
+ final boolean actionLogout =
"logout".equals(request.getParameter("action"));
+
+ if (user == null && isLegalLoginKey) {
+
+ // Login if no user and a legal login key.
+ loginUsingCookie(loginKey, datamodel, basicUserService,
response);
+
+ } else if (user != null && (actionLogout || !isLegalLoginKey)) {
+
+ // Check if the user should be logged out, no login key
anymore.
+ logout(datamodel, basicUserService, response);
+
+ // Remove the logout from the url to prevent problems with
sesamBackUrl.
+ if (actionLogout) {
+ final String strippedUrl = request.getRequestURL() + "?"
+ + request.getQueryString().substring(0,
request.getQueryString().indexOf("&action"));
+ redirect(strippedUrl, response);
+ }
+
+ } else if (user != null && isLegalLoginKey) {
+ if (!isLoginKeyLegalForUser(loginKey, user)) {
+
+ // Check if the logged in user is the one found in the
login key
+ logout(datamodel, basicUserService, response);
+ loginUsingCookie(loginKey, datamodel, basicUserService,
response);
+
+ } else if (user.isDirty(updateTimestamp)) {
+
+ // Check if the user object is dirty, refresh if needed.
+ LOG.info("Logged in user dirty, refreshes: " +
user.getUsername());
+
datamodel.getUser().setUser(basicUserService.refreshUser(user));
+ }
+ }
+
+ }else{
+
+ LOG.warn("Couldn't find the basic user service.");
+ return;
+ }
+ }
+
+ /**
+ * Initializing the personalization session from the login key.
+ *
+ * @param loginKey the login key used for login
+ * @param datamodel the data model
+ * @param userService the user service
+ * @param response the request response
+ */
+ private static void loginUsingCookie(
+ final String loginKey,
+ final DataModel datamodel,
+ final BasicUserService basicUserService,
+ final HttpServletResponse response) {
+
+ LOG.info("Login user with login key: " + loginKey);
+
+ try {
+ final BasicUser user =
basicUserService.authenticateByLoginKey(loginKey);
+
+ if (null != user) {
+
+ datamodel.getUser().setUser(user);
+
+ // Updates the login cookie.
+ UserCookieUtil.setUserLoginCookie(response,
user.getNextLoginKey());
+ }
+ } catch (final InvalidTokenException e) {
+ // TODO: Give message to user?
+ LOG.warn("Invalid token in login key: " + loginKey);
+ datamodel.getUser().setUser(null);
+ UserCookieUtil.setUserLoginCookieDefault(response);
+ }
+ }
+
+ /**
+ * Method used to reset a session totally.
+ *
+ * @param datamodel the datamodel
+ * @param userService the user service
+ * @param response the request response
+ */
+ private static void logout(
+ final DataModel datamodel,
+ final BasicUserService userService,
+ final HttpServletResponse response) {
+
+ final BasicUser user = datamodel.getUser().getUser();
+ LOG.info("Logout: " + user.getUsername());
+
+ if (userService.isLegalLoginKey(user.getNextLoginKey())) {
+ userService.invalidateLogin(user.getNextLoginKey());
+ }
+
+ UserCookieUtil.setUserLoginCookieDefault(response);
+ datamodel.getUser().setUser(null);
+ }
+
+ /**
+ * Place a cookie into the response so any subsequent requests can trust
that cookies are enabled.
+ *
+ * @param request The servlet request we are processing
+ * @param response The servlet response for the request
+ */
+ private static void initialiseUserCookie(final HttpServletRequest request,
final HttpServletResponse response) {
+
+ if (null == UserCookieUtil.getUserLoginCookie(request)) {
+
+ // The user is not logged in.
+ // Place the cookie, so we can test that cookies are enabled.
+ UserCookieUtil.setUserLoginCookieDefault(response);
+ }
+ }
+
+ private static boolean isLoginKeyLegalForUser(final String loginKey, final
BasicUser user) {
+
+ // The user id in the login key must be the same as in the user object.
+ return user.getUserId().toString().equals(
+ loginKey.substring(0,
loginKey.indexOf(BasicUserService.LOGIN_KEY_SEPARATOR)));
+ }
+
+ private static void redirect(final String url, final HttpServletResponse
response) {
+
+ try {
+ response.sendRedirect(url);
+
+ } catch (final IOException e) {
+ LOG.error(e);
+ }
+ }
+
+ /**
+ * Return the basic user service used for personalization.
+ *
+ * @param datamodel the data model
+ * @return the user service
+ */
+ private static BasicUserService getBasicUserService(final DataModel
datamodel) {
+
+ // lookup the ejb3-client service
+ final SiteConfiguration siteConf =
datamodel.getSite().getSiteConfiguration();
+ final String url =
siteConf.getProperty("schibstedsok_remote_service_url");
+ final String jndi = siteConf.getProperty("user_service_jndi_name");
+
+ LOG.debug("Url: " + url);
+ LOG.debug("JndiName: " + jndi);
+
+ final Properties properties = new Properties();
+ properties.put("java.naming.factory.initial",
"org.jnp.interfaces.NamingContextFactory");
+ properties.put("java.naming.factory.url.pkgs",
"org.jboss.naming:org.jnp.interfaces");
+ properties.put("java.naming.provider.url", url);
+
+ try {
+ return (BasicUserService) new
InitialContext(properties).lookup(jndi);
+
+ } catch (final NamingException ne) {
+ // acceptable for sesat not to have to have a user service backend
+ LOG.debug(ne.getMessage(), ne);
+ return null;
+ }
+ }
+
+}
_______________________________________________
Kernel-commits mailing list
[email protected]
http://sesat.no/mailman/listinfo/kernel-commits