forked from Archives/Athou_commafeed
configurable session manager
This commit is contained in:
@@ -9,13 +9,8 @@ import io.dropwizard.migrations.MigrationsBundle;
|
||||
import io.dropwizard.setup.Bootstrap;
|
||||
import io.dropwizard.setup.Environment;
|
||||
|
||||
import java.io.File;
|
||||
import java.util.Date;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.servlet.SessionTrackingMode;
|
||||
|
||||
import org.eclipse.jetty.server.session.HashSessionManager;
|
||||
import org.eclipse.jetty.server.session.SessionHandler;
|
||||
|
||||
import com.commafeed.backend.feed.FeedRefreshTaskGiver;
|
||||
@@ -50,7 +45,6 @@ import com.commafeed.frontend.servlet.AnalyticsServlet;
|
||||
import com.commafeed.frontend.servlet.CustomCssServlet;
|
||||
import com.commafeed.frontend.servlet.LogoutServlet;
|
||||
import com.commafeed.frontend.servlet.NextUnreadServlet;
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
import com.google.inject.Guice;
|
||||
import com.google.inject.Injector;
|
||||
import com.wordnik.swagger.config.ConfigFactory;
|
||||
@@ -102,22 +96,7 @@ public class CommaFeedApplication extends Application<CommaFeedConfiguration> {
|
||||
Injector injector = Guice.createInjector(new CommaFeedModule(hibernateBundle.getSessionFactory(), config, environment.metrics()));
|
||||
|
||||
// Auth/session management
|
||||
HashSessionManager sessionManager = new HashSessionManager();
|
||||
sessionManager.setSessionTrackingModes(ImmutableSet.of(SessionTrackingMode.COOKIE));
|
||||
sessionManager.setHttpOnly(true);
|
||||
sessionManager.getSessionCookieConfig().setHttpOnly(true);
|
||||
|
||||
sessionManager.setStoreDirectory(new File("sessions"));
|
||||
sessionManager.getSessionCookieConfig().setMaxAge((int) TimeUnit.DAYS.toSeconds(30));
|
||||
sessionManager.setMaxInactiveInterval((int) TimeUnit.DAYS.toSeconds(30));
|
||||
|
||||
sessionManager.setDeleteUnrestorableSessions(true);
|
||||
sessionManager.setIdleSavePeriod((int) TimeUnit.HOURS.toSeconds(2));
|
||||
sessionManager.setRefreshCookieAge((int) TimeUnit.DAYS.toSeconds(1));
|
||||
sessionManager.setSavePeriod((int) TimeUnit.MINUTES.toSeconds(5));
|
||||
sessionManager.setScavengePeriod((int) TimeUnit.MINUTES.toSeconds(5));
|
||||
|
||||
environment.servlets().setSessionHandler(new SessionHandler(sessionManager));
|
||||
environment.servlets().setSessionHandler(new SessionHandler(config.getSessionManagerFactory().build()));
|
||||
environment.jersey().register(new SecurityCheckUserServiceProvider(injector.getInstance(UserService.class)));
|
||||
environment.jersey().register(SecurityCheckProvider.class);
|
||||
environment.jersey().register(HttpSessionProvider.class);
|
||||
@@ -138,17 +117,19 @@ public class CommaFeedApplication extends Application<CommaFeedConfiguration> {
|
||||
environment.servlets().addServlet("customCss", injector.getInstance(CustomCssServlet.class)).addMapping("/custom_css.css");
|
||||
environment.servlets().addServlet("analytics.js", injector.getInstance(AnalyticsServlet.class)).addMapping("/analytics.js");
|
||||
|
||||
// Tasks
|
||||
// Scheduled tasks
|
||||
SchedulingService schedulingService = new SchedulingService();
|
||||
schedulingService.register(injector.getInstance(OldStatusesCleanupTask.class));
|
||||
schedulingService.register(injector.getInstance(OrphansCleanupTask.class));
|
||||
environment.lifecycle().manage(schedulingService);
|
||||
|
||||
// Managed objects
|
||||
// database init/changelogs
|
||||
environment.lifecycle().manage(injector.getInstance(StartupService.class));
|
||||
|
||||
// background feed fetching
|
||||
environment.lifecycle().manage(injector.getInstance(FeedRefreshTaskGiver.class));
|
||||
environment.lifecycle().manage(injector.getInstance(FeedRefreshWorker.class));
|
||||
environment.lifecycle().manage(injector.getInstance(FeedRefreshUpdater.class));
|
||||
environment.lifecycle().manage(schedulingService);
|
||||
|
||||
// Swagger
|
||||
environment.jersey().register(new ApiListingResourceJSON());
|
||||
|
||||
@@ -15,6 +15,7 @@ import lombok.Getter;
|
||||
import org.apache.commons.lang.time.DateUtils;
|
||||
import org.hibernate.validator.constraints.NotBlank;
|
||||
|
||||
import com.commafeed.frontend.SessionManagerFactory;
|
||||
import com.fasterxml.jackson.annotation.JsonProperty;
|
||||
|
||||
@Getter
|
||||
@@ -34,6 +35,11 @@ public class CommaFeedConfiguration extends Configuration {
|
||||
@NotNull
|
||||
@JsonProperty("database")
|
||||
private DataSourceFactory database = new DataSourceFactory();
|
||||
|
||||
@Valid
|
||||
@NotNull
|
||||
@JsonProperty("session")
|
||||
private SessionManagerFactory sessionManagerFactory = new SessionManagerFactory();
|
||||
|
||||
@Valid
|
||||
@NotNull
|
||||
@@ -50,80 +56,61 @@ public class CommaFeedConfiguration extends Configuration {
|
||||
|
||||
@Getter
|
||||
public static class ApplicationSettings {
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
@NotBlank
|
||||
private String contextPath;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
@NotBlank
|
||||
private String publicUrl;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
private boolean allowRegistrations;
|
||||
|
||||
@JsonProperty
|
||||
private String googleAnalyticsTrackingCode;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
@Min(1)
|
||||
private int backgroundThreads;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
@Min(1)
|
||||
private int databaseUpdateThreads;
|
||||
|
||||
@JsonProperty
|
||||
private String smtpHost;
|
||||
|
||||
@JsonProperty
|
||||
private int smtpPort;
|
||||
|
||||
@JsonProperty
|
||||
private boolean smtpTls;
|
||||
|
||||
@JsonProperty
|
||||
private String smtpUserName;
|
||||
|
||||
@JsonProperty
|
||||
private String smtpPassword;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
private boolean heavyLoad;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
private boolean pubsubhubbub;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
private boolean imageProxyEnabled;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
@Min(0)
|
||||
private int queryTimeout;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
@Min(0)
|
||||
private int keepStatusDays;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
@Min(0)
|
||||
private int refreshIntervalMinutes;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
private CacheType cache;
|
||||
|
||||
@JsonProperty
|
||||
@NotNull
|
||||
private String announcement;
|
||||
|
||||
|
||||
@@ -0,0 +1,45 @@
|
||||
package com.commafeed.frontend;
|
||||
|
||||
import io.dropwizard.util.Duration;
|
||||
|
||||
import java.io.File;
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.SessionTrackingMode;
|
||||
|
||||
import lombok.Getter;
|
||||
|
||||
import org.eclipse.jetty.server.SessionManager;
|
||||
import org.eclipse.jetty.server.session.HashSessionManager;
|
||||
|
||||
import com.google.common.collect.ImmutableSet;
|
||||
|
||||
@Getter
|
||||
public class SessionManagerFactory {
|
||||
|
||||
private String path = "sessions";
|
||||
private Duration cookieMaxAge = Duration.days(30);
|
||||
private Duration cookieRefreshAge = Duration.days(1);
|
||||
private Duration maxInactiveInterval = Duration.days(30);
|
||||
private Duration idleSavePeriod = Duration.hours(2);
|
||||
private Duration savePeriod = Duration.minutes(5);
|
||||
private Duration scavengePeriod = Duration.minutes(5);
|
||||
|
||||
public SessionManager build() throws IOException {
|
||||
HashSessionManager manager = new HashSessionManager();
|
||||
manager.setSessionTrackingModes(ImmutableSet.of(SessionTrackingMode.COOKIE));
|
||||
manager.setHttpOnly(true);
|
||||
manager.getSessionCookieConfig().setHttpOnly(true);
|
||||
manager.setDeleteUnrestorableSessions(true);
|
||||
|
||||
manager.setStoreDirectory(new File(getPath()));
|
||||
manager.getSessionCookieConfig().setMaxAge((int) cookieMaxAge.toSeconds());
|
||||
manager.setRefreshCookieAge((int) cookieRefreshAge.toSeconds());
|
||||
manager.setMaxInactiveInterval((int) maxInactiveInterval.toSeconds());
|
||||
manager.setIdleSavePeriod((int) idleSavePeriod.toSeconds());
|
||||
manager.setSavePeriod((int) savePeriod.toSeconds());
|
||||
manager.setScavengePeriod((int) scavengePeriod.toSeconds());
|
||||
return manager;
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user