Use spring-javaformat to format and check code

Resolves: #1450
This commit is contained in:
Vedran Pavic
2019-06-17 23:44:55 +02:00
parent 0eaeb98b0c
commit 822db7fbbf
241 changed files with 2961 additions and 4660 deletions

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -27,8 +27,7 @@ import java.util.Map;
* @author Rob Winch
* @author Vedran Pavic
*/
public interface FindByIndexNameSessionRepository<S extends Session>
extends SessionRepository<S> {
public interface FindByIndexNameSessionRepository<S extends Session> extends SessionRepository<S> {
/**
* A session index that contains the current principal name (i.e. username).
@@ -44,7 +43,6 @@ public interface FindByIndexNameSessionRepository<S extends Session>
/**
* Find a {@link Map} of the session id to the {@link Session} of all sessions that
* contain the specified index name index value.
*
* @param indexName the name of the index (i.e.
* {@link FindByIndexNameSessionRepository#PRINCIPAL_NAME_INDEX_NAME})
* @param indexValue the value of the index to search for.
@@ -59,7 +57,6 @@ public interface FindByIndexNameSessionRepository<S extends Session>
* contain the index with the name
* {@link FindByIndexNameSessionRepository#PRINCIPAL_NAME_INDEX_NAME} and the
* specified principal name.
*
* @param principalName the principal name
* @return a {@code Map} (never {@code null}) of the session id to the {@code Session}
* of all sessions that contain the specified principal name. If no results are found,

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -47,15 +47,20 @@ import java.util.UUID;
* @since 1.0
*/
public final class MapSession implements Session, Serializable {
/**
* Default {@link #setMaxInactiveInterval(Duration)} (30 minutes).
*/
public static final int DEFAULT_MAX_INACTIVE_INTERVAL_SECONDS = 1800;
private String id;
private final String originalId;
private Map<String, Object> sessionAttrs = new HashMap<>();
private Instant creationTime = Instant.now();
private Instant lastAccessedTime = this.creationTime;
/**
@@ -70,12 +75,10 @@ public final class MapSession implements Session, Serializable {
this(generateId());
}
/**
* Creates a new instance with the specified id. This is preferred to the default
* constructor when the id is known to prevent unnecessary consumption on entropy
* which can be slow.
*
* @param id the identifier to use
*/
public MapSession(String id) {
@@ -85,7 +88,6 @@ public final class MapSession implements Session, Serializable {
/**
* Creates a new instance from the provided {@link Session}.
*
* @param session the {@link Session} to initialize this {@link Session} with. Cannot
* be null.
*/
@@ -95,8 +97,7 @@ public final class MapSession implements Session, Serializable {
}
this.id = session.getId();
this.originalId = this.id;
this.sessionAttrs = new HashMap<>(
session.getAttributeNames().size());
this.sessionAttrs = new HashMap<>(session.getAttributeNames().size());
for (String attrName : session.getAttributeNames()) {
Object attrValue = session.getAttribute(attrName);
if (attrValue != null) {
@@ -205,7 +206,6 @@ public final class MapSession implements Session, Serializable {
* Sets the identifier for this {@link Session}. The id should be a secure random
* generated value to prevent malicious users from guessing this value. The default is
* a secure random generated identifier.
*
* @param id the identifier for this session.
*/
public void setId(String id) {
@@ -227,4 +227,5 @@ public final class MapSession implements Session, Serializable {
}
private static final long serialVersionUID = 7160779239673823561L;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -49,7 +49,6 @@ public class MapSessionRepository implements SessionRepository<MapSession> {
/**
* Creates a new instance backed by the provided {@link java.util.Map}. This allows
* injecting a distributed {@link java.util.Map}.
*
* @param sessions the {@link java.util.Map} to use. Cannot be null.
*/
public MapSessionRepository(Map<String, Session> sessions) {
@@ -99,8 +98,7 @@ public class MapSessionRepository implements SessionRepository<MapSession> {
public MapSession createSession() {
MapSession result = new MapSession();
if (this.defaultMaxInactiveInterval != null) {
result.setMaxInactiveInterval(
Duration.ofSeconds(this.defaultMaxInactiveInterval));
result.setMaxInactiveInterval(Duration.ofSeconds(this.defaultMaxInactiveInterval));
}
return result;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -51,7 +51,6 @@ public class ReactiveMapSessionRepository implements ReactiveSessionRepository<M
/**
* Creates a new instance backed by the provided {@link Map}. This allows injecting a
* distributed {@link Map}.
*
* @param sessions the {@link Map} to use. Cannot be null.
*/
public ReactiveMapSessionRepository(Map<String, Session> sessions) {
@@ -101,8 +100,7 @@ public class ReactiveMapSessionRepository implements ReactiveSessionRepository<M
return Mono.defer(() -> {
MapSession result = new MapSession();
if (this.defaultMaxInactiveInterval != null) {
result.setMaxInactiveInterval(
Duration.ofSeconds(this.defaultMaxInactiveInterval));
result.setMaxInactiveInterval(Duration.ofSeconds(this.defaultMaxInactiveInterval));
}
return Mono.just(result);
});

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2017 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -36,7 +36,6 @@ public interface ReactiveSessionRepository<S extends Session> {
* persisted. For example, the implementation returned might keep track of the changes
* ensuring that only the delta needs to be persisted on a save.
* </p>
*
* @return a new {@link Session} that is capable of being persisted by this
* {@link ReactiveSessionRepository}
*/
@@ -51,7 +50,6 @@ public interface ReactiveSessionRepository<S extends Session> {
* returning a {@link Session} that immediately persists any changes. In this case,
* this method may not actually do anything.
* </p>
*
* @param session the {@link Session} to save
* @return indicator of operation completion
*/
@@ -60,7 +58,6 @@ public interface ReactiveSessionRepository<S extends Session> {
/**
* Gets the {@link Session} by the {@link Session#getId()} or null if no
* {@link Session} is found.
*
* @param id the {@link Session#getId()} to lookup
* @return the {@link Session} by the {@link Session#getId()} or null if no
* {@link Session} is found.

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -32,13 +32,13 @@ public interface Session {
/**
* Gets a unique string that identifies the {@link Session}.
*
* @return a unique string that identifies the {@link Session}
*/
String getId();
/**
* Changes the session id. After invoking the {@link #getId()} will return a new identifier.
* Changes the session id. After invoking the {@link #getId()} will return a new
* identifier.
* @return the new session id which {@link #getId()} will now return
*/
String changeSessionId();
@@ -46,7 +46,6 @@ public interface Session {
/**
* Gets the Object associated with the specified name or null if no Object is
* associated to that name.
*
* @param <T> the return type of the attribute
* @param attributeName the name of the attribute to get
* @return the Object associated with the specified name or null if no Object is
@@ -65,8 +64,7 @@ public interface Session {
default <T> T getRequiredAttribute(String name) {
T result = getAttribute(name);
if (result == null) {
throw new IllegalArgumentException(
"Required attribute '" + name + "' is missing.");
throw new IllegalArgumentException("Required attribute '" + name + "' is missing.");
}
return result;
}
@@ -88,7 +86,6 @@ public interface Session {
* Gets the attribute names that have a value associated with it. Each value can be
* passed into {@link org.springframework.session.Session#getAttribute(String)} to
* obtain the attribute value.
*
* @return the attribute names that have a value associated with it.
* @see #getAttribute(String)
*/
@@ -98,7 +95,6 @@ public interface Session {
* Sets the attribute value for the provided attribute name. If the attributeValue is
* null, it has the same result as removing the attribute with
* {@link org.springframework.session.Session#removeAttribute(String)} .
*
* @param attributeName the attribute name to set
* @param attributeValue the value of the attribute to set. If null, the attribute
* will be removed.
@@ -113,21 +109,18 @@ public interface Session {
/**
* Gets the time when this session was created.
*
* @return the time when this session was created.
*/
Instant getCreationTime();
/**
* Sets the last accessed time.
*
* @param lastAccessedTime the last accessed time
*/
void setLastAccessedTime(Instant lastAccessedTime);
/**
* Gets the last time this {@link Session} was accessed.
*
* @return the last time the client sent a request associated with the session
*/
Instant getLastAccessedTime();
@@ -135,7 +128,6 @@ public interface Session {
/**
* Sets the maximum inactive interval between requests before this session will be
* invalidated. A negative time indicates that the session will never timeout.
*
* @param interval the amount of time that the {@link Session} should be kept alive
* between client requests.
*/
@@ -144,7 +136,6 @@ public interface Session {
/**
* Gets the maximum inactive interval between requests before this session will be
* invalidated. A negative time indicates that the session will never timeout.
*
* @return the maximum inactive interval between requests before this session will be
* invalidated. A negative time indicates that the session will never timeout.
*/
@@ -152,7 +143,6 @@ public interface Session {
/**
* Returns true if the session is expired.
*
* @return true if the session is expired, else false.
*/
boolean isExpired();

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2016 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -34,7 +34,6 @@ public interface SessionRepository<S extends Session> {
* persisted. For example, the implementation returned might keep track of the changes
* ensuring that only the delta needs to be persisted on a save.
* </p>
*
* @return a new {@link Session} that is capable of being persisted by this
* {@link SessionRepository}
*/
@@ -49,7 +48,6 @@ public interface SessionRepository<S extends Session> {
* returning a {@link Session} that immediately persists any changes. In this case,
* this method may not actually do anything.
* </p>
*
* @param session the {@link Session} to save
*/
void save(S session);
@@ -57,7 +55,6 @@ public interface SessionRepository<S extends Session> {
/**
* Gets the {@link Session} by the {@link Session#getId()} or null if no
* {@link Session} is found.
*
* @param id the {@link org.springframework.session.Session#getId()} to lookup
* @return the {@link Session} by the {@link Session#getId()} or null if no
* {@link Session} is found.
@@ -70,4 +67,5 @@ public interface SessionRepository<S extends Session> {
* @param id the {@link org.springframework.session.Session#getId()} to delete
*/
void deleteById(String id);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2016 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -76,4 +76,5 @@ import org.springframework.session.events.SessionDestroyedEvent;
@Import(SpringHttpSessionConfiguration.class)
@Configuration
public @interface EnableSpringHttpSession {
}

View File

@@ -88,7 +88,6 @@ import org.springframework.util.ObjectUtils;
* @author Rob Winch
* @author Vedran Pavic
* @since 1.1
*
* @see EnableSpringHttpSession
*/
@Configuration(proxyBeanMethods = false)
@@ -110,8 +109,7 @@ public class SpringHttpSessionConfiguration implements ApplicationContextAware {
@PostConstruct
public void init() {
CookieSerializer cookieSerializer = (this.cookieSerializer != null)
? this.cookieSerializer
CookieSerializer cookieSerializer = (this.cookieSerializer != null) ? this.cookieSerializer
: createDefaultCookieSerializer();
this.defaultHttpSessionIdResolver.setCookieSerializer(cookieSerializer);
}
@@ -124,21 +122,16 @@ public class SpringHttpSessionConfiguration implements ApplicationContextAware {
@Bean
public <S extends Session> SessionRepositoryFilter<? extends Session> springSessionRepositoryFilter(
SessionRepository<S> sessionRepository) {
SessionRepositoryFilter<S> sessionRepositoryFilter = new SessionRepositoryFilter<>(
sessionRepository);
SessionRepositoryFilter<S> sessionRepositoryFilter = new SessionRepositoryFilter<>(sessionRepository);
sessionRepositoryFilter.setHttpSessionIdResolver(this.httpSessionIdResolver);
return sessionRepositoryFilter;
}
@Override
public void setApplicationContext(ApplicationContext applicationContext)
throws BeansException {
if (ClassUtils.isPresent(
"org.springframework.security.web.authentication.RememberMeServices",
null)) {
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
if (ClassUtils.isPresent("org.springframework.security.web.authentication.RememberMeServices", null)) {
this.usesSpringSessionRememberMeServices = !ObjectUtils
.isEmpty(applicationContext
.getBeanNamesForType(SpringSessionRememberMeServices.class));
.isEmpty(applicationContext.getBeanNamesForType(SpringSessionRememberMeServices.class));
}
}
@@ -170,8 +163,7 @@ public class SpringHttpSessionConfiguration implements ApplicationContextAware {
sessionCookieConfig = this.servletContext.getSessionCookieConfig();
}
catch (UnsupportedOperationException ex) {
this.logger
.warn("Unable to obtain SessionCookieConfig: " + ex.getMessage());
this.logger.warn("Unable to obtain SessionCookieConfig: " + ex.getMessage());
}
if (sessionCookieConfig != null) {
if (sessionCookieConfig.getName() != null) {
@@ -189,8 +181,7 @@ public class SpringHttpSessionConfiguration implements ApplicationContextAware {
}
}
if (this.usesSpringSessionRememberMeServices) {
cookieSerializer.setRememberMeRequestAttribute(
SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR);
cookieSerializer.setRememberMeRequestAttribute(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR);
}
return cookieSerializer;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -23,9 +23,10 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
/**
* Add this annotation to a {@code @Configuration} class to configure a {@code WebSessionManager} for a WebFlux
* application. This annotation assumes a {@code ReactiveSessionRepository} is defined somewhere in the application
* context. If not, it will fail with a clear error message. For example:
* Add this annotation to a {@code @Configuration} class to configure a
* {@code WebSessionManager} for a WebFlux application. This annotation assumes a
* {@code ReactiveSessionRepository} is defined somewhere in the application context. If
* not, it will fail with a clear error message. For example:
*
* <pre>
* <code>
@@ -39,8 +40,7 @@ import org.springframework.context.annotation.Import;
* }
*
* }
* </code>
* </pre>
* </code> </pre>
*
* @author Greg Turnquist
* @since 2.0
@@ -51,4 +51,5 @@ import org.springframework.context.annotation.Import;
@Import(SpringWebSessionConfiguration.class)
@Configuration
public @interface EnableSpringWebSession {
}

View File

@@ -27,12 +27,12 @@ import org.springframework.web.server.session.WebSessionIdResolver;
import org.springframework.web.server.session.WebSessionManager;
/**
* Wire up a {@link WebSessionManager} using a Reactive {@link ReactiveSessionRepository} from the application context.
* Wire up a {@link WebSessionManager} using a Reactive {@link ReactiveSessionRepository}
* from the application context.
*
* @author Greg Turnquist
* @author Rob Winch
* @since 2.0
*
* @see EnableSpringWebSession
*/
@Configuration(proxyBeanMethods = false)
@@ -45,10 +45,11 @@ public class SpringWebSessionConfiguration {
private WebSessionIdResolver webSessionIdResolver;
/**
* Configure a {@link WebSessionManager} using a provided {@link ReactiveSessionRepository}.
*
* Configure a {@link WebSessionManager} using a provided
* {@link ReactiveSessionRepository}.
* @param repository a bean that implements {@link ReactiveSessionRepository}.
* @return a configured {@link WebSessionManager} registered with a preconfigured name.
* @return a configured {@link WebSessionManager} registered with a preconfigured
* name.
*/
@Bean(WebHttpHandlerBuilder.WEB_SESSION_MANAGER_BEAN_NAME)
public WebSessionManager webSessionManager(ReactiveSessionRepository<? extends Session> repository) {
@@ -62,4 +63,5 @@ public class SpringWebSessionConfiguration {
return manager;
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -44,7 +44,6 @@ public abstract class AbstractSessionEvent extends ApplicationEvent {
* Gets the {@link Session} that was destroyed. For some {@link SessionRepository}
* implementations it may not be possible to get the original session in which case
* this may be null.
*
* @param <S> the type of Session
* @return the expired {@link Session} or null if the data store does not support
* obtaining it

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -36,23 +36,18 @@ import org.springframework.session.SessionRepository;
* @author Vedran Pavic
* @since 1.3
*/
class SpringSessionBackedSessionInformation<S extends Session>
extends SessionInformation {
class SpringSessionBackedSessionInformation<S extends Session> extends SessionInformation {
static final String EXPIRED_ATTR = SpringSessionBackedSessionInformation.class
.getName() + ".EXPIRED";
static final String EXPIRED_ATTR = SpringSessionBackedSessionInformation.class.getName() + ".EXPIRED";
private static final Log logger = LogFactory
.getLog(SpringSessionBackedSessionInformation.class);
private static final Log logger = LogFactory.getLog(SpringSessionBackedSessionInformation.class);
private static final String SPRING_SECURITY_CONTEXT = "SPRING_SECURITY_CONTEXT";
private final SessionRepository<S> sessionRepository;
SpringSessionBackedSessionInformation(S session,
SessionRepository<S> sessionRepository) {
super(resolvePrincipal(session), session.getId(),
Date.from(session.getLastAccessedTime()));
SpringSessionBackedSessionInformation(S session, SessionRepository<S> sessionRepository) {
super(resolvePrincipal(session), session.getId(), Date.from(session.getLastAccessedTime()));
this.sessionRepository = sessionRepository;
Boolean expired = session.getAttribute(EXPIRED_ATTR);
if (Boolean.TRUE.equals(expired)) {
@@ -62,20 +57,16 @@ class SpringSessionBackedSessionInformation<S extends Session>
/**
* Tries to determine the principal's name from the given Session.
*
* @param session the session
* @return the principal's name, or empty String if it couldn't be determined
*/
private static String resolvePrincipal(Session session) {
String principalName = session
.getAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME);
String principalName = session.getAttribute(FindByIndexNameSessionRepository.PRINCIPAL_NAME_INDEX_NAME);
if (principalName != null) {
return principalName;
}
SecurityContext securityContext = session
.getAttribute(SPRING_SECURITY_CONTEXT);
if (securityContext != null
&& securityContext.getAuthentication() != null) {
SecurityContext securityContext = session.getAttribute(SPRING_SECURITY_CONTEXT);
if (securityContext != null && securityContext.getAuthentication() != null) {
return securityContext.getAuthentication().getName();
}
return "";
@@ -84,9 +75,8 @@ class SpringSessionBackedSessionInformation<S extends Session>
@Override
public void expireNow() {
if (logger.isDebugEnabled()) {
logger.debug("Expiring session " + getSessionId() + " for user '"
+ getPrincipal() + "', presumably because maximum allowed concurrent "
+ "sessions was exceeded");
logger.debug("Expiring session " + getSessionId() + " for user '" + getPrincipal()
+ "', presumably because maximum allowed concurrent " + "sessions was exceeded");
}
super.expireNow();
S session = this.sessionRepository.findById(getSessionId());
@@ -95,8 +85,7 @@ class SpringSessionBackedSessionInformation<S extends Session>
this.sessionRepository.save(session);
}
else {
logger.info("Could not find Session with id " + getSessionId()
+ " to mark as expired");
logger.info("Could not find Session with id " + getSessionId() + " to mark as expired");
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -44,13 +44,11 @@ import org.springframework.util.Assert;
* @author Vedran Pavic
* @since 1.3
*/
public class SpringSessionBackedSessionRegistry<S extends Session>
implements SessionRegistry {
public class SpringSessionBackedSessionRegistry<S extends Session> implements SessionRegistry {
private final FindByIndexNameSessionRepository<S> sessionRepository;
public SpringSessionBackedSessionRegistry(
FindByIndexNameSessionRepository<S> sessionRepository) {
public SpringSessionBackedSessionRegistry(FindByIndexNameSessionRepository<S> sessionRepository) {
Assert.notNull(sessionRepository, "sessionRepository cannot be null");
this.sessionRepository = sessionRepository;
}
@@ -63,16 +61,13 @@ public class SpringSessionBackedSessionRegistry<S extends Session>
}
@Override
public List<SessionInformation> getAllSessions(Object principal,
boolean includeExpiredSessions) {
Collection<S> sessions = this.sessionRepository
.findByPrincipalName(name(principal)).values();
public List<SessionInformation> getAllSessions(Object principal, boolean includeExpiredSessions) {
Collection<S> sessions = this.sessionRepository.findByPrincipalName(name(principal)).values();
List<SessionInformation> infos = new ArrayList<>();
for (S session : sessions) {
if (includeExpiredSessions || !Boolean.TRUE.equals(session
.getAttribute(SpringSessionBackedSessionInformation.EXPIRED_ATTR))) {
infos.add(new SpringSessionBackedSessionInformation<>(session,
this.sessionRepository));
if (includeExpiredSessions
|| !Boolean.TRUE.equals(session.getAttribute(SpringSessionBackedSessionInformation.EXPIRED_ATTR))) {
infos.add(new SpringSessionBackedSessionInformation<>(session, this.sessionRepository));
}
}
return infos;
@@ -82,8 +77,7 @@ public class SpringSessionBackedSessionRegistry<S extends Session>
public SessionInformation getSessionInformation(String sessionId) {
S session = this.sessionRepository.findById(sessionId);
if (session != null) {
return new SpringSessionBackedSessionInformation<>(session,
this.sessionRepository);
return new SpringSessionBackedSessionInformation<>(session, this.sessionRepository);
}
return null;
}
@@ -111,7 +105,6 @@ public class SpringSessionBackedSessionRegistry<S extends Session>
/**
* Derives a String name for the given principal.
*
* @param principal as provided by Spring Security
* @return name of the principal, or its {@code toString()} representation if no name
* could be derived

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2016 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -36,21 +36,19 @@ import org.springframework.util.Assert;
* @author Vedran Pavic
* @since 1.3.0
*/
public class SpringSessionRememberMeServices
implements RememberMeServices, LogoutHandler {
public class SpringSessionRememberMeServices implements RememberMeServices, LogoutHandler {
/**
* Remember-me login request attribute name.
*/
public static final String REMEMBER_ME_LOGIN_ATTR = SpringSessionRememberMeServices.class
.getName() + "REMEMBER_ME_LOGIN_ATTR";
public static final String REMEMBER_ME_LOGIN_ATTR = SpringSessionRememberMeServices.class.getName()
+ "REMEMBER_ME_LOGIN_ATTR";
private static final String DEFAULT_REMEMBERME_PARAMETER = "remember-me";
private static final int THIRTY_DAYS_SECONDS = 2592000;
private static final Log logger = LogFactory
.getLog(SpringSessionRememberMeServices.class);
private static final Log logger = LogFactory.getLog(SpringSessionRememberMeServices.class);
private String rememberMeParameterName = DEFAULT_REMEMBERME_PARAMETER;
@@ -61,22 +59,19 @@ public class SpringSessionRememberMeServices
private String sessionAttrToDeleteOnLoginFail = HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY;
@Override
public final Authentication autoLogin(HttpServletRequest request,
HttpServletResponse response) {
public final Authentication autoLogin(HttpServletRequest request, HttpServletResponse response) {
return null;
}
@Override
public final void loginFail(HttpServletRequest request,
HttpServletResponse response) {
public final void loginFail(HttpServletRequest request, HttpServletResponse response) {
logout(request);
}
@Override
public final void loginSuccess(HttpServletRequest request,
HttpServletResponse response, Authentication successfulAuthentication) {
if (!this.alwaysRemember
&& !rememberMeRequested(request, this.rememberMeParameterName)) {
public final void loginSuccess(HttpServletRequest request, HttpServletResponse response,
Authentication successfulAuthentication) {
if (!this.alwaysRemember && !rememberMeRequested(request, this.rememberMeParameterName)) {
logger.debug("Remember-me login not requested.");
return;
}
@@ -103,8 +98,7 @@ public class SpringSessionRememberMeServices
}
}
if (logger.isDebugEnabled()) {
logger.debug("Did not send remember-me cookie (principal did not set "
+ "parameter '" + parameter + "')");
logger.debug("Did not send remember-me cookie (principal did not set " + "parameter '" + parameter + "')");
}
return false;
}
@@ -116,8 +110,7 @@ public class SpringSessionRememberMeServices
* @param rememberMeParameterName the request parameter
*/
public void setRememberMeParameterName(String rememberMeParameterName) {
Assert.hasText(rememberMeParameterName,
"rememberMeParameterName cannot be empty or null");
Assert.hasText(rememberMeParameterName, "rememberMeParameterName cannot be empty or null");
this.rememberMeParameterName = rememberMeParameterName;
}
@@ -130,8 +123,7 @@ public class SpringSessionRememberMeServices
}
@Override
public void logout(HttpServletRequest request, HttpServletResponse response,
Authentication authentication) {
public void logout(HttpServletRequest request, HttpServletResponse response, Authentication authentication) {
logout(request);
}
@@ -142,4 +134,5 @@ public class SpringSessionRememberMeServices
session.removeAttribute(this.sessionAttrToDeleteOnLoginFail);
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2016 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -71,8 +71,7 @@ import org.springframework.web.filter.DelegatingFilterProxy;
*
*/
@Order(100)
public abstract class AbstractHttpSessionApplicationInitializer
implements WebApplicationInitializer {
public abstract class AbstractHttpSessionApplicationInitializer implements WebApplicationInitializer {
private static final String SERVLET_CONTEXT_PREFIX = "org.springframework.web.servlet.FrameworkServlet.CONTEXT.";
@@ -98,12 +97,10 @@ public abstract class AbstractHttpSessionApplicationInitializer
/**
* Creates a new instance that will instantiate the {@link ContextLoaderListener} with
* the specified classes.
*
* @param configurationClasses {@code @Configuration} classes that will be used to
* configure the context
*/
protected AbstractHttpSessionApplicationInitializer(
Class<?>... configurationClasses) {
protected AbstractHttpSessionApplicationInitializer(Class<?>... configurationClasses) {
this.configurationClasses = configurationClasses;
}
@@ -125,8 +122,7 @@ public abstract class AbstractHttpSessionApplicationInitializer
*/
private void insertSessionRepositoryFilter(ServletContext servletContext) {
String filterName = DEFAULT_FILTER_NAME;
DelegatingFilterProxy springSessionRepositoryFilter = new DelegatingFilterProxy(
filterName);
DelegatingFilterProxy springSessionRepositoryFilter = new DelegatingFilterProxy(filterName);
String contextAttribute = getWebApplicationContextAttribute();
if (contextAttribute != null) {
springSessionRepositoryFilter.setContextAttribute(contextAttribute);
@@ -138,7 +134,6 @@ public abstract class AbstractHttpSessionApplicationInitializer
* Inserts the provided {@link Filter}s before existing {@link Filter}s using default
* generated names, {@link #getSessionDispatcherTypes()}, and
* {@link #isAsyncSessionSupported()}.
*
* @param servletContext the {@link ServletContext} to use
* @param filters the {@link Filter}s to register
*/
@@ -150,7 +145,6 @@ public abstract class AbstractHttpSessionApplicationInitializer
* Inserts the provided {@link Filter}s after existing {@link Filter}s using default
* generated names, {@link #getSessionDispatcherTypes()}, and
* {@link #isAsyncSessionSupported()}.
*
* @param servletContext the {@link ServletContext} to use
* @param filters the {@link Filter}s to register
*/
@@ -161,22 +155,18 @@ public abstract class AbstractHttpSessionApplicationInitializer
/**
* Registers the provided {@link Filter}s using default generated names,
* {@link #getSessionDispatcherTypes()}, and {@link #isAsyncSessionSupported()}.
*
* @param servletContext the {@link ServletContext} to use
* @param insertBeforeOtherFilters if true, will insert the provided {@link Filter}s
* before other {@link Filter}s. Otherwise, will insert the {@link Filter}s after
* other {@link Filter}s.
* @param filters the {@link Filter}s to register
*/
private void registerFilters(ServletContext servletContext,
boolean insertBeforeOtherFilters, Filter... filters) {
private void registerFilters(ServletContext servletContext, boolean insertBeforeOtherFilters, Filter... filters) {
Assert.notEmpty(filters, "filters cannot be null or empty");
for (Filter filter : filters) {
if (filter == null) {
throw new IllegalArgumentException(
"filters cannot contain null values. Got "
+ Arrays.asList(filters));
throw new IllegalArgumentException("filters cannot contain null values. Got " + Arrays.asList(filters));
}
String filterName = Conventions.getVariableName(filter);
registerFilter(servletContext, insertBeforeOtherFilters, filterName, filter);
@@ -186,25 +176,22 @@ public abstract class AbstractHttpSessionApplicationInitializer
/**
* Registers the provided filter using the {@link #isAsyncSessionSupported()} and
* {@link #getSessionDispatcherTypes()}.
*
* @param servletContext the servlet context
* @param insertBeforeOtherFilters should this Filter be inserted before or after
* other {@link Filter}
* @param filterName the filter name
* @param filter the filter
*/
private void registerFilter(ServletContext servletContext,
boolean insertBeforeOtherFilters, String filterName, Filter filter) {
private void registerFilter(ServletContext servletContext, boolean insertBeforeOtherFilters, String filterName,
Filter filter) {
Dynamic registration = servletContext.addFilter(filterName, filter);
if (registration == null) {
throw new IllegalStateException(
"Duplicate Filter registration for '" + filterName
+ "'. Check to ensure the Filter is only configured once.");
throw new IllegalStateException("Duplicate Filter registration for '" + filterName
+ "'. Check to ensure the Filter is only configured once.");
}
registration.setAsyncSupported(isAsyncSessionSupported());
EnumSet<DispatcherType> dispatcherTypes = getSessionDispatcherTypes();
registration.addMappingForUrlPatterns(dispatcherTypes, !insertBeforeOtherFilters,
"/*");
registration.addMappingForUrlPatterns(dispatcherTypes, !insertBeforeOtherFilters, "/*");
}
/**
@@ -218,7 +205,6 @@ public abstract class AbstractHttpSessionApplicationInitializer
* {@link ApplicationContext} is used to look up the springSessionRepositoryFilter
* bean.
* </p>
*
* @return the {@link DelegatingFilterProxy#getContextAttribute()} or null if the
* parent {@link ApplicationContext} should be used
*/
@@ -241,7 +227,6 @@ public abstract class AbstractHttpSessionApplicationInitializer
* name, you can return "dispatcher" from this method to use the DispatcherServlet's
* {@link WebApplicationContext}.
* </p>
*
* @return the {@code <servlet-name>} of the DispatcherServlet to use its
* {@link WebApplicationContext} or null (default) to use the parent
* {@link ApplicationContext}.
@@ -271,17 +256,16 @@ public abstract class AbstractHttpSessionApplicationInitializer
* @return the {@link DispatcherType} for the filter
*/
protected EnumSet<DispatcherType> getSessionDispatcherTypes() {
return EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR,
DispatcherType.ASYNC);
return EnumSet.of(DispatcherType.REQUEST, DispatcherType.ERROR, DispatcherType.ASYNC);
}
/**
* Determine if the springSessionRepositoryFilter should be marked as supporting
* asynch. Default is true.
*
* @return true if springSessionRepositoryFilter should be marked as supporting asynch
*/
protected boolean isAsyncSessionSupported() {
return true;
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2017 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -63,8 +63,8 @@ import org.springframework.session.web.http.CookieSerializer.CookieValue;
*/
public final class CookieHttpSessionIdResolver implements HttpSessionIdResolver {
private static final String WRITTEN_SESSION_ID_ATTR = CookieHttpSessionIdResolver.class
.getName().concat(".WRITTEN_SESSION_ID_ATTR");
private static final String WRITTEN_SESSION_ID_ATTR = CookieHttpSessionIdResolver.class.getName()
.concat(".WRITTEN_SESSION_ID_ATTR");
private CookieSerializer cookieSerializer = new DefaultCookieSerializer();
@@ -74,14 +74,12 @@ public final class CookieHttpSessionIdResolver implements HttpSessionIdResolver
}
@Override
public void setSessionId(HttpServletRequest request, HttpServletResponse response,
String sessionId) {
public void setSessionId(HttpServletRequest request, HttpServletResponse response, String sessionId) {
if (sessionId.equals(request.getAttribute(WRITTEN_SESSION_ID_ATTR))) {
return;
}
request.setAttribute(WRITTEN_SESSION_ID_ATTR, sessionId);
this.cookieSerializer
.writeCookieValue(new CookieValue(request, response, sessionId));
this.cookieSerializer.writeCookieValue(new CookieValue(request, response, sessionId));
}
@Override
@@ -91,7 +89,6 @@ public final class CookieHttpSessionIdResolver implements HttpSessionIdResolver
/**
* Sets the {@link CookieSerializer} to be used.
*
* @param cookieSerializer the cookieSerializer to set. Cannot be null.
*/
public void setCookieSerializer(CookieSerializer cookieSerializer) {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -32,7 +32,6 @@ public interface CookieSerializer {
/**
* Writes a given {@link CookieValue} to the provided {@link HttpServletResponse}.
*
* @param cookieValue the {@link CookieValue} to write to
* {@link CookieValue#getResponse()}. Cannot be null.
*/
@@ -43,7 +42,6 @@ public interface CookieSerializer {
* List since there can be multiple {@link Cookie} in a single request with a matching
* name. For example, one Cookie may have a path of / and another of /context, but the
* path is not transmitted in the request.
*
* @param request the {@link HttpServletRequest} to read the cookie from. Cannot be
* null.
* @return the values of all the matching cookies
@@ -70,7 +68,6 @@ public interface CookieSerializer {
/**
* Creates a new instance.
*
* @param request the {@link HttpServletRequest} to use. Useful for determining
* the context in which the cookie is set. Cannot be null.
* @param response the {@link HttpServletResponse} to use.
@@ -78,8 +75,7 @@ public interface CookieSerializer {
* modified by the {@link CookieSerializer} when writing to the actual cookie so
* long as the original value is returned when the cookie is read.
*/
public CookieValue(HttpServletRequest request, HttpServletResponse response,
String cookieValue) {
public CookieValue(HttpServletRequest request, HttpServletResponse response, String cookieValue) {
this.request = request;
this.response = response;
this.cookieValue = cookieValue;
@@ -108,7 +104,6 @@ public interface CookieSerializer {
* The value to be written. This value may be modified by the
* {@link CookieSerializer} before written to the cookie. However, the value must
* be the same as the original when it is read back in.
*
* @return the value to be written
*/
public String getCookieValue() {

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -97,15 +97,12 @@ public class DefaultCookieSerializer implements CookieSerializer {
if (cookies != null) {
for (Cookie cookie : cookies) {
if (this.cookieName.equals(cookie.getName())) {
String sessionId = (this.useBase64Encoding
? base64Decode(cookie.getValue())
: cookie.getValue());
String sessionId = (this.useBase64Encoding ? base64Decode(cookie.getValue()) : cookie.getValue());
if (sessionId == null) {
continue;
}
if (this.jvmRoute != null && sessionId.endsWith(this.jvmRoute)) {
sessionId = sessionId.substring(0,
sessionId.length() - this.jvmRoute.length());
sessionId = sessionId.substring(0, sessionId.length() - this.jvmRoute.length());
}
matchingCookieValues.add(sessionId);
}
@@ -135,11 +132,9 @@ public class DefaultCookieSerializer implements CookieSerializer {
int maxAge = getMaxAge(cookieValue);
if (maxAge > -1) {
sb.append("; Max-Age=").append(cookieValue.getCookieMaxAge());
OffsetDateTime expires = (maxAge != 0)
? OffsetDateTime.now().plusSeconds(maxAge)
OffsetDateTime expires = (maxAge != 0) ? OffsetDateTime.now().plusSeconds(maxAge)
: Instant.EPOCH.atOffset(ZoneOffset.UTC);
sb.append("; Expires=")
.append(expires.format(DateTimeFormatter.RFC_1123_DATE_TIME));
sb.append("; Expires=").append(expires.format(DateTimeFormatter.RFC_1123_DATE_TIME));
}
String domain = getDomainName(request);
if (domain != null && domain.length() > 0) {
@@ -214,10 +209,8 @@ public class DefaultCookieSerializer implements CookieSerializer {
char[] chars = value.toCharArray();
for (int i = start; i < end; i++) {
char c = chars[i];
if (c < 0x21 || c == 0x22 || c == 0x2c || c == 0x3b || c == 0x5c
|| c == 0x7f) {
throw new IllegalArgumentException(
"Invalid character in cookie value: " + Integer.toString(c));
if (c < 0x21 || c == 0x22 || c == 0x2c || c == 0x3b || c == 0x5c || c == 0x7f) {
throw new IllegalArgumentException("Invalid character in cookie value: " + Integer.toString(c));
}
}
}
@@ -225,8 +218,8 @@ public class DefaultCookieSerializer implements CookieSerializer {
private int getMaxAge(CookieValue cookieValue) {
int maxAge = cookieValue.getCookieMaxAge();
if (maxAge < 0) {
if (this.rememberMeRequestAttribute != null && cookieValue.getRequest()
.getAttribute(this.rememberMeRequestAttribute) != null) {
if (this.rememberMeRequestAttribute != null
&& cookieValue.getRequest().getAttribute(this.rememberMeRequestAttribute) != null) {
// the cookie is only written at time of session creation, so we rely on
// session expiration rather than cookie expiration if remember me is
// enabled
@@ -247,8 +240,7 @@ public class DefaultCookieSerializer implements CookieSerializer {
while (i < chars.length) {
prev = cur;
cur = chars[i];
if (!domainValid.get(cur)
|| ((prev == '.' || prev == -1) && (cur == '.' || cur == '-'))
if (!domainValid.get(cur) || ((prev == '.' || prev == -1) && (cur == '.' || cur == '-'))
|| (prev == '-' && cur == '.')) {
throw new IllegalArgumentException("Invalid cookie domain: " + domain);
}
@@ -270,7 +262,6 @@ public class DefaultCookieSerializer implements CookieSerializer {
/**
* Sets if a Cookie marked as secure should be used. The default is to use the value
* of {@link HttpServletRequest#isSecure()}.
*
* @param useSecureCookie determines if the cookie should be marked as secure.
*/
public void setUseSecureCookie(boolean useSecureCookie) {
@@ -279,7 +270,6 @@ public class DefaultCookieSerializer implements CookieSerializer {
/**
* Sets if a Cookie marked as HTTP Only should be used. The default is true.
*
* @param useHttpOnlyCookie determines if the cookie should be marked as HTTP Only.
*/
public void setUseHttpOnlyCookie(boolean useHttpOnlyCookie) {
@@ -296,7 +286,6 @@ public class DefaultCookieSerializer implements CookieSerializer {
/**
* Sets the path of the Cookie. The default is to use the context path from the
* {@link HttpServletRequest}.
*
* @param cookiePath the path of the Cookie. If null, the default of the context path
* will be used.
*/
@@ -314,7 +303,6 @@ public class DefaultCookieSerializer implements CookieSerializer {
/**
* Sets the maxAge property of the Cookie. The default is to delete the cookie when
* the browser is closed.
*
* @param cookieMaxAge the maxAge property of the Cookie
*/
public void setCookieMaxAge(int cookieMaxAge) {
@@ -325,14 +313,12 @@ public class DefaultCookieSerializer implements CookieSerializer {
* Sets an explicit Domain Name. This allow the domain of "example.com" to be used
* when the request comes from www.example.com. This allows for sharing the cookie
* across subdomains. The default is to use the current domain.
*
* @param domainName the name of the domain to use. (i.e. "example.com")
* @throws IllegalStateException if the domainNamePattern is also set
*/
public void setDomainName(String domainName) {
if (this.domainNamePattern != null) {
throw new IllegalStateException(
"Cannot set both domainName and domainNamePattern");
throw new IllegalStateException("Cannot set both domainName and domainNamePattern");
}
this.domainName = domainName;
}
@@ -362,18 +348,15 @@ public class DefaultCookieSerializer implements CookieSerializer {
* <li>localhost - null</li>
* <li>127.0.1.1 - null</li>
* </ul>
*
* @param domainNamePattern the case insensitive pattern to extract the domain name
* with
* @throws IllegalStateException if the domainName is also set
*/
public void setDomainNamePattern(String domainNamePattern) {
if (this.domainName != null) {
throw new IllegalStateException(
"Cannot set both domainName and domainNamePattern");
throw new IllegalStateException("Cannot set both domainName and domainNamePattern");
}
this.domainNamePattern = Pattern.compile(domainNamePattern,
Pattern.CASE_INSENSITIVE);
this.domainNamePattern = Pattern.compile(domainNamePattern, Pattern.CASE_INSENSITIVE);
}
/**
@@ -390,7 +373,6 @@ public class DefaultCookieSerializer implements CookieSerializer {
* To use set a custom route on each JVM instance and setup a frontend proxy to
* forward all requests to the JVM based on the route.
* </p>
*
* @param jvmRoute the JVM Route to use (i.e. "node01jvmA", "n01ja", etc)
*/
public void setJvmRoute(String jvmRoute) {
@@ -401,7 +383,6 @@ public class DefaultCookieSerializer implements CookieSerializer {
* Set if the Base64 encoding of cookie value should be used. This is valuable in
* order to support <a href="https://tools.ietf.org/html/rfc6265">RFC 6265</a> which
* recommends using Base 64 encoding to the cookie value.
*
* @param useBase64Encoding the flag to indicate whether to use Base64 encoding
*/
public void setUseBase64Encoding(boolean useBase64Encoding) {
@@ -416,8 +397,7 @@ public class DefaultCookieSerializer implements CookieSerializer {
*/
public void setRememberMeRequestAttribute(String rememberMeRequestAttribute) {
if (rememberMeRequestAttribute == null) {
throw new IllegalArgumentException(
"rememberMeRequestAttribute cannot be null");
throw new IllegalArgumentException("rememberMeRequestAttribute cannot be null");
}
this.rememberMeRequestAttribute = rememberMeRequestAttribute;
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -98,13 +98,11 @@ public class HeaderHttpSessionIdResolver implements HttpSessionIdResolver {
@Override
public List<String> resolveSessionIds(HttpServletRequest request) {
String headerValue = request.getHeader(this.headerName);
return (headerValue != null) ? Collections.singletonList(headerValue)
: Collections.emptyList();
return (headerValue != null) ? Collections.singletonList(headerValue) : Collections.emptyList();
}
@Override
public void setSessionId(HttpServletRequest request, HttpServletResponse response,
String sessionId) {
public void setSessionId(HttpServletRequest request, HttpServletResponse response, String sessionId) {
response.setHeader(this.headerName, sessionId);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -142,8 +142,8 @@ class HttpSessionAdapter<S extends Session> implements HttpSession {
if (value != oldValue) {
if (oldValue instanceof HttpSessionBindingListener) {
try {
((HttpSessionBindingListener) oldValue).valueUnbound(
new HttpSessionBindingEvent(this, name, oldValue));
((HttpSessionBindingListener) oldValue)
.valueUnbound(new HttpSessionBindingEvent(this, name, oldValue));
}
catch (Throwable th) {
logger.error("Error invoking session binding event listener", th);
@@ -151,8 +151,7 @@ class HttpSessionAdapter<S extends Session> implements HttpSession {
}
if (value instanceof HttpSessionBindingListener) {
try {
((HttpSessionBindingListener) value)
.valueBound(new HttpSessionBindingEvent(this, name, value));
((HttpSessionBindingListener) value).valueBound(new HttpSessionBindingEvent(this, name, value));
}
catch (Throwable th) {
logger.error("Error invoking session binding event listener", th);
@@ -173,8 +172,7 @@ class HttpSessionAdapter<S extends Session> implements HttpSession {
this.session.removeAttribute(name);
if (oldValue instanceof HttpSessionBindingListener) {
try {
((HttpSessionBindingListener) oldValue)
.valueUnbound(new HttpSessionBindingEvent(this, name, oldValue));
((HttpSessionBindingListener) oldValue).valueUnbound(new HttpSessionBindingEvent(this, name, oldValue));
}
catch (Throwable th) {
logger.error("Error invoking session binding event listener", th);
@@ -205,8 +203,7 @@ class HttpSessionAdapter<S extends Session> implements HttpSession {
private void checkState() {
if (this.invalidated) {
throw new IllegalStateException(
"The HttpSession has already be invalidated.");
throw new IllegalStateException("The HttpSession has already be invalidated.");
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -49,8 +49,7 @@ public interface HttpSessionIdResolver {
* @param response the current response
* @param sessionId the session id
*/
void setSessionId(HttpServletRequest request, HttpServletResponse response,
String sessionId);
void setSessionId(HttpServletRequest request, HttpServletResponse response, String sessionId);
/**
* Instruct the client to end the current session. This method is invoked when a

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -36,6 +36,7 @@ import org.apache.commons.logging.LogFactory;
* @since 1.0
*/
abstract class OnCommittedResponseWrapper extends HttpServletResponseWrapper {
private final Log logger = LogFactory.getLog(getClass());
private boolean disableOnCommitted;
@@ -204,13 +205,11 @@ abstract class OnCommittedResponseWrapper extends HttpServletResponseWrapper {
/**
* Adds the contentLengthToWrite to the total contentWritten size and checks to see if
* the response should be written.
*
* @param contentLengthToWrite the size of the content that is about to be written.
*/
private void checkContentLength(long contentLengthToWrite) {
this.contentWritten += contentLengthToWrite;
boolean isBodyFullyWritten = this.contentLength > 0
&& this.contentWritten >= this.contentLength;
boolean isBodyFullyWritten = this.contentLength > 0 && this.contentWritten >= this.contentLength;
int bufferSize = getBufferSize();
boolean requiresFlush = bufferSize > 0 && this.contentWritten >= bufferSize;
if (isBodyFullyWritten || requiresFlush) {
@@ -234,9 +233,11 @@ abstract class OnCommittedResponseWrapper extends HttpServletResponseWrapper {
* calling the prior to methods that commit the response. We delegate all methods to
* the original {@link java.io.PrintWriter} to ensure that the behavior is as close to
* the original {@link java.io.PrintWriter} as possible. See SEC-2039
*
* @author Rob Winch
*/
private class SaveContextPrintWriter extends PrintWriter {
private final PrintWriter delegate;
SaveContextPrintWriter(PrintWriter delegate) {
@@ -466,6 +467,7 @@ abstract class OnCommittedResponseWrapper extends HttpServletResponseWrapper {
trackContentLength(c);
return this.delegate.append(c);
}
}
/**
@@ -477,6 +479,7 @@ abstract class OnCommittedResponseWrapper extends HttpServletResponseWrapper {
* @author Rob Winch
*/
private class SaveContextServletOutputStream extends ServletOutputStream {
private final ServletOutputStream delegate;
SaveContextServletOutputStream(ServletOutputStream delegate) {
@@ -634,5 +637,7 @@ abstract class OnCommittedResponseWrapper extends HttpServletResponseWrapper {
public void setWriteListener(WriteListener writeListener) {
this.delegate.setWriteListener(writeListener);
}
}
}

View File

@@ -37,19 +37,18 @@ import javax.servlet.http.HttpServletResponse;
* @since 1.0
*/
abstract class OncePerRequestFilter implements Filter {
/**
* Suffix that gets appended to the filter name for the "already filtered" request
* attribute.
*/
public static final String ALREADY_FILTERED_SUFFIX = ".FILTERED";
private String alreadyFilteredAttributeName = getClass().getName()
.concat(ALREADY_FILTERED_SUFFIX);
private String alreadyFilteredAttributeName = getClass().getName().concat(ALREADY_FILTERED_SUFFIX);
/**
* This {@code doFilter} implementation stores a request attribute for
* "already filtered", proceeding without filtering again if the attribute is already
* there.
* This {@code doFilter} implementation stores a request attribute for "already
* filtered", proceeding without filtering again if the attribute is already there.
* @param request the request
* @param response the response
* @param filterChain the filter chain
@@ -57,21 +56,17 @@ abstract class OncePerRequestFilter implements Filter {
* @throws IOException in case of I/O operation exception
*/
@Override
public final void doFilter(ServletRequest request, ServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
public final void doFilter(ServletRequest request, ServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
if (!(request instanceof HttpServletRequest)
|| !(response instanceof HttpServletResponse)) {
throw new ServletException(
"OncePerRequestFilter just supports HTTP requests");
if (!(request instanceof HttpServletRequest) || !(response instanceof HttpServletResponse)) {
throw new ServletException("OncePerRequestFilter just supports HTTP requests");
}
HttpServletRequest httpRequest = (HttpServletRequest) request;
HttpServletResponse httpResponse = (HttpServletResponse) response;
String alreadyFilteredAttributeName = this.alreadyFilteredAttributeName;
alreadyFilteredAttributeName = updateForErrorDispatch(
alreadyFilteredAttributeName, request);
boolean hasAlreadyFilteredAttribute = request
.getAttribute(alreadyFilteredAttributeName) != null;
alreadyFilteredAttributeName = updateForErrorDispatch(alreadyFilteredAttributeName, request);
boolean hasAlreadyFilteredAttribute = request.getAttribute(alreadyFilteredAttributeName) != null;
if (hasAlreadyFilteredAttribute) {
@@ -91,9 +86,9 @@ abstract class OncePerRequestFilter implements Filter {
}
}
private String updateForErrorDispatch(String alreadyFilteredAttributeName,
ServletRequest request) {
// Jetty does ERROR dispatch within sendError, so request attribute is still present
private String updateForErrorDispatch(String alreadyFilteredAttributeName, ServletRequest request) {
// Jetty does ERROR dispatch within sendError, so request attribute is still
// present
// Use a separate attribute for ERROR dispatches
if (DispatcherType.ERROR.equals(request.getDispatcherType())
&& request.getAttribute(alreadyFilteredAttributeName) != null) {
@@ -108,7 +103,6 @@ abstract class OncePerRequestFilter implements Filter {
* <p>
* Provides HttpServletRequest and HttpServletResponse arguments instead of the
* default ServletRequest and ServletResponse ones.
*
* @param request the request
* @param response the response
* @param filterChain the FilterChain
@@ -116,9 +110,8 @@ abstract class OncePerRequestFilter implements Filter {
* @throws IOException thrown when an I/O exception of some sort has occurred
* @see Filter#doFilter
*/
protected abstract void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException;
protected abstract void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException;
@Override
public void init(FilterConfig config) {
@@ -127,4 +120,5 @@ abstract class OncePerRequestFilter implements Filter {
@Override
public void destroy() {
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2017 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -40,6 +40,7 @@ import org.springframework.web.context.ServletContextAware;
*/
public class SessionEventHttpSessionListenerAdapter
implements ApplicationListener<AbstractSessionEvent>, ServletContextAware {
private final List<HttpSessionListener> listeners;
private ServletContext context;
@@ -75,8 +76,7 @@ public class SessionEventHttpSessionListenerAdapter
private HttpSessionEvent createHttpSessionEvent(AbstractSessionEvent event) {
Session session = event.getSession();
HttpSession httpSession = new HttpSessionAdapter<>(session,
this.context);
HttpSession httpSession = new HttpSessionAdapter<>(session, this.context);
return new HttpSessionEvent(httpSession);
}
@@ -91,4 +91,5 @@ public class SessionEventHttpSessionListenerAdapter
public void setServletContext(ServletContext servletContext) {
this.context = servletContext;
}
}

View File

@@ -79,25 +79,21 @@ import org.springframework.session.SessionRepository;
@Order(SessionRepositoryFilter.DEFAULT_ORDER)
public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFilter {
private static final String SESSION_LOGGER_NAME = SessionRepositoryFilter.class
.getName().concat(".SESSION_LOGGER");
private static final String SESSION_LOGGER_NAME = SessionRepositoryFilter.class.getName().concat(".SESSION_LOGGER");
private static final Log SESSION_LOGGER = LogFactory.getLog(SESSION_LOGGER_NAME);
/**
* The session repository request attribute name.
*/
public static final String SESSION_REPOSITORY_ATTR = SessionRepository.class
.getName();
public static final String SESSION_REPOSITORY_ATTR = SessionRepository.class.getName();
/**
* Invalid session id (not backed by the session repository) request attribute name.
*/
public static final String INVALID_SESSION_ID_ATTR = SESSION_REPOSITORY_ATTR
+ ".invalidSessionId";
public static final String INVALID_SESSION_ID_ATTR = SESSION_REPOSITORY_ATTR + ".invalidSessionId";
private static final String CURRENT_SESSION_ATTR = SESSION_REPOSITORY_ATTR
+ ".CURRENT_SESSION";
private static final String CURRENT_SESSION_ATTR = SESSION_REPOSITORY_ATTR + ".CURRENT_SESSION";
/**
* The default filter order.
@@ -110,7 +106,6 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
/**
* Creates a new instance.
*
* @param sessionRepository the <code>SessionRepository</code> to use. Cannot be null.
*/
public SessionRepositoryFilter(SessionRepository<S> sessionRepository) {
@@ -123,7 +118,6 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
/**
* Sets the {@link HttpSessionIdResolver} to be used. The default is a
* {@link CookieHttpSessionIdResolver}.
*
* @param httpSessionIdResolver the {@link HttpSessionIdResolver} to use. Cannot be
* null.
*/
@@ -135,15 +129,13 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
}
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
request.setAttribute(SESSION_REPOSITORY_ATTR, this.sessionRepository);
SessionRepositoryRequestWrapper wrappedRequest = new SessionRepositoryRequestWrapper(
request, response);
SessionRepositoryResponseWrapper wrappedResponse = new SessionRepositoryResponseWrapper(
wrappedRequest, response);
SessionRepositoryRequestWrapper wrappedRequest = new SessionRepositoryRequestWrapper(request, response);
SessionRepositoryResponseWrapper wrappedResponse = new SessionRepositoryResponseWrapper(wrappedRequest,
response);
try {
filterChain.doFilter(wrappedRequest, wrappedResponse);
@@ -159,8 +151,7 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
* @author Rob Winch
* @since 1.0
*/
private final class SessionRepositoryResponseWrapper
extends OnCommittedResponseWrapper {
private final class SessionRepositoryResponseWrapper extends OnCommittedResponseWrapper {
private final SessionRepositoryRequestWrapper request;
@@ -169,8 +160,7 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
* @param request the request to be wrapped
* @param response the response to be wrapped
*/
SessionRepositoryResponseWrapper(SessionRepositoryRequestWrapper request,
HttpServletResponse response) {
SessionRepositoryResponseWrapper(SessionRepositoryRequestWrapper request, HttpServletResponse response) {
super(response);
if (request == null) {
throw new IllegalArgumentException("request cannot be null");
@@ -182,6 +172,7 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
protected void onResponseCommitted() {
this.request.commitSession();
}
}
/**
@@ -192,8 +183,7 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
* @author Rob Winch
* @since 1.0
*/
private final class SessionRepositoryRequestWrapper
extends HttpServletRequestWrapper {
private final class SessionRepositoryRequestWrapper extends HttpServletRequestWrapper {
private final HttpServletResponse response;
@@ -207,8 +197,7 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
private boolean requestedSessionInvalidated;
private SessionRepositoryRequestWrapper(HttpServletRequest request,
HttpServletResponse response) {
private SessionRepositoryRequestWrapper(HttpServletRequest request, HttpServletResponse response) {
super(request);
this.response = response;
}
@@ -221,8 +210,7 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
HttpSessionWrapper wrappedSession = getCurrentSession();
if (wrappedSession == null) {
if (isInvalidateClientSession()) {
SessionRepositoryFilter.this.httpSessionIdResolver.expireSession(this,
this.response);
SessionRepositoryFilter.this.httpSessionIdResolver.expireSession(this, this.response);
}
}
else {
@@ -230,10 +218,8 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
clearRequestedSessionCache();
SessionRepositoryFilter.this.sessionRepository.save(session);
String sessionId = session.getId();
if (!isRequestedSessionIdValid()
|| !sessionId.equals(getRequestedSessionId())) {
SessionRepositoryFilter.this.httpSessionIdResolver.setSessionId(this,
this.response, sessionId);
if (!isRequestedSessionIdValid() || !sessionId.equals(getRequestedSessionId())) {
SessionRepositoryFilter.this.httpSessionIdResolver.setSessionId(this, this.response, sessionId);
}
}
}
@@ -321,8 +307,7 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
SESSION_LOGGER.debug(
"A new session was created. To help you troubleshoot where the session was created we provided a StackTrace (this is not an error). You can prevent this from appearing by disabling DEBUG logging for "
+ SESSION_LOGGER_NAME,
new RuntimeException(
"For debugging purposes only (not an error)"));
new RuntimeException("For debugging purposes only (not an error)"));
}
S session = SessionRepositoryFilter.this.sessionRepository.createSession();
session.setLastAccessedTime(Instant.now());
@@ -352,14 +337,12 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
private S getRequestedSession() {
if (!this.requestedSessionCached) {
List<String> sessionIds = SessionRepositoryFilter.this.httpSessionIdResolver
.resolveSessionIds(this);
List<String> sessionIds = SessionRepositoryFilter.this.httpSessionIdResolver.resolveSessionIds(this);
for (String sessionId : sessionIds) {
if (this.requestedSessionId == null) {
this.requestedSessionId = sessionId;
}
S session = SessionRepositoryFilter.this.sessionRepository
.findById(sessionId);
S session = SessionRepositoryFilter.this.sessionRepository.findById(sessionId);
if (session != null) {
this.requestedSession = session;
this.requestedSessionId = sessionId;
@@ -397,6 +380,7 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
clearRequestedSessionCache();
SessionRepositoryFilter.this.sessionRepository.deleteById(getId());
}
}
/**
@@ -404,8 +388,7 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
*
* @since 1.3.4
*/
private final class SessionCommittingRequestDispatcher
implements RequestDispatcher {
private final class SessionCommittingRequestDispatcher implements RequestDispatcher {
private final RequestDispatcher delegate;
@@ -414,14 +397,12 @@ public class SessionRepositoryFilter<S extends Session> extends OncePerRequestFi
}
@Override
public void forward(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
public void forward(ServletRequest request, ServletResponse response) throws ServletException, IOException {
this.delegate.forward(request, response);
}
@Override
public void include(ServletRequest request, ServletResponse response)
throws ServletException, IOException {
public void include(ServletRequest request, ServletResponse response) throws ServletException, IOException {
SessionRepositoryRequestWrapper.this.commitSession();
this.delegate.include(request, response);
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -61,12 +61,14 @@ public class SpringSessionWebSessionStore<S extends Session> implements WebSessi
}
/**
* Configure the {@link Clock} to use to set lastAccessTime on every created
* session and to calculate if it is expired.
* <p>This may be useful to align to different timezone or to set the clock
* back in a test, e.g. {@code Clock.offset(clock, Duration.ofMinutes(-31))}
* in order to simulate session expiration.
* <p>By default this is {@code Clock.system(ZoneId.of("GMT"))}.
* Configure the {@link Clock} to use to set lastAccessTime on every created session
* and to calculate if it is expired.
* <p>
* This may be useful to align to different timezone or to set the clock back in a
* test, e.g. {@code Clock.offset(clock, Duration.ofMinutes(-31))} in order to
* simulate session expiration.
* <p>
* By default this is {@code Clock.system(ZoneId.of("GMT"))}.
* @param clock the clock to use
*/
public void setClock(Clock clock) {
@@ -90,8 +92,7 @@ public class SpringSessionWebSessionStore<S extends Session> implements WebSessi
@Override
public Mono<WebSession> retrieveSession(String sessionId) {
return this.sessions.findById(sessionId)
.doOnNext((session) -> session.setLastAccessedTime(this.clock.instant()))
.map(this::existingSession);
.doOnNext((session) -> session.setLastAccessedTime(this.clock.instant())).map(this::existingSession);
}
@Override
@@ -133,8 +134,7 @@ public class SpringSessionWebSessionStore<S extends Session> implements WebSessi
@Override
public Mono<Void> changeSessionId() {
return Mono.defer(() -> {
this.session
.changeSessionId();
this.session.changeSessionId();
return save();
});
}
@@ -152,8 +152,7 @@ public class SpringSessionWebSessionStore<S extends Session> implements WebSessi
@Override
public boolean isStarted() {
State value = this.state.get();
return (State.STARTED.equals(value)
|| (State.NEW.equals(value) && !getAttributes().isEmpty()));
return (State.STARTED.equals(value) || (State.NEW.equals(value) && !getAttributes().isEmpty()));
}
@Override
@@ -198,10 +197,13 @@ public class SpringSessionWebSessionStore<S extends Session> implements WebSessi
public void setMaxIdleTime(Duration maxIdleTime) {
this.session.setMaxInactiveInterval(maxIdleTime);
}
}
private enum State {
NEW, STARTED, EXPIRED
}
private static class SpringSessionMap implements Map<String, Object> {
@@ -226,8 +228,7 @@ public class SpringSessionWebSessionStore<S extends Session> implements WebSessi
@Override
public boolean containsKey(Object key) {
return key instanceof String
&& this.session.getAttributeNames().contains(key);
return key instanceof String && this.session.getAttributeNames().contains(key);
}
@Override
@@ -346,5 +347,7 @@ public class SpringSessionWebSessionStore<S extends Session> implements WebSessi
}
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -93,8 +93,7 @@ public abstract class AbstractSessionWebSocketMessageBrokerConfigurer<S extends
public final void registerStompEndpoints(StompEndpointRegistry registry) {
if (registry instanceof WebMvcStompEndpointRegistry) {
WebMvcStompEndpointRegistry mvcRegistry = (WebMvcStompEndpointRegistry) registry;
configureStompEndpoints(new SessionStompEndpointRegistry(mvcRegistry,
sessionRepositoryInterceptor()));
configureStompEndpoints(new SessionStompEndpointRegistry(mvcRegistry, sessionRepositoryInterceptor()));
}
}
@@ -102,7 +101,6 @@ public abstract class AbstractSessionWebSocketMessageBrokerConfigurer<S extends
* Register STOMP endpoints mapping each to a specific URL and (optionally) enabling
* and configuring SockJS fallback options with a
* {@link SessionRepositoryMessageInterceptor} automatically added as an interceptor.
*
* @param registry the {@link StompEndpointRegistry} which automatically has a
* {@link SessionRepositoryMessageInterceptor} added to it.
*/
@@ -133,19 +131,19 @@ public abstract class AbstractSessionWebSocketMessageBrokerConfigurer<S extends
* A {@link StompEndpointRegistry} that applies {@link HandshakeInterceptor}.
*/
static class SessionStompEndpointRegistry implements StompEndpointRegistry {
private final WebMvcStompEndpointRegistry registry;
private final HandshakeInterceptor interceptor;
SessionStompEndpointRegistry(WebMvcStompEndpointRegistry registry,
HandshakeInterceptor interceptor) {
SessionStompEndpointRegistry(WebMvcStompEndpointRegistry registry, HandshakeInterceptor interceptor) {
this.registry = registry;
this.interceptor = interceptor;
}
@Override
public StompWebSocketEndpointRegistration addEndpoint(String... paths) {
StompWebSocketEndpointRegistration endpoints = this.registry
.addEndpoint(paths);
StompWebSocketEndpointRegistration endpoints = this.registry.addEndpoint(paths);
endpoints.addInterceptors(this.interceptor);
return endpoints;
}
@@ -161,9 +159,10 @@ public abstract class AbstractSessionWebSocketMessageBrokerConfigurer<S extends
}
@Override
public WebMvcStompEndpointRegistry setErrorHandler(
StompSubProtocolErrorHandler errorHandler) {
public WebMvcStompEndpointRegistry setErrorHandler(StompSubProtocolErrorHandler errorHandler) {
return this.registry.setErrorHandler(errorHandler);
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2016 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -44,4 +44,5 @@ public class SessionConnectEvent extends ApplicationEvent {
public WebSocketSession getWebSocketSession() {
return this.webSocketSession;
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2016 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -38,24 +38,19 @@ import org.springframework.web.socket.handler.WebSocketHandlerDecoratorFactory;
*
* @author Rob Winch
* @since 1.0
*
* @see WebSocketRegistryListener
*/
public final class WebSocketConnectHandlerDecoratorFactory
implements WebSocketHandlerDecoratorFactory {
public final class WebSocketConnectHandlerDecoratorFactory implements WebSocketHandlerDecoratorFactory {
private static final Log logger = LogFactory
.getLog(WebSocketConnectHandlerDecoratorFactory.class);
private static final Log logger = LogFactory.getLog(WebSocketConnectHandlerDecoratorFactory.class);
private final ApplicationEventPublisher eventPublisher;
/**
* Creates a new instance.
*
* @param eventPublisher the {@link ApplicationEventPublisher} to use. Cannot be null.
*/
public WebSocketConnectHandlerDecoratorFactory(
ApplicationEventPublisher eventPublisher) {
public WebSocketConnectHandlerDecoratorFactory(ApplicationEventPublisher eventPublisher) {
Assert.notNull(eventPublisher, "eventPublisher cannot be null");
this.eventPublisher = eventPublisher;
}
@@ -72,8 +67,7 @@ public final class WebSocketConnectHandlerDecoratorFactory
}
@Override
public void afterConnectionEstablished(WebSocketSession wsSession)
throws Exception {
public void afterConnectionEstablished(WebSocketSession wsSession) throws Exception {
super.afterConnectionEstablished(wsSession);
publishEvent(new SessionConnectEvent(this, wsSession));
@@ -81,12 +75,13 @@ public final class WebSocketConnectHandlerDecoratorFactory
private void publishEvent(ApplicationEvent event) {
try {
WebSocketConnectHandlerDecoratorFactory.this.eventPublisher
.publishEvent(event);
WebSocketConnectHandlerDecoratorFactory.this.eventPublisher.publishEvent(event);
}
catch (Throwable ex) {
logger.error("Error publishing " + event + ".", ex);
}
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -41,18 +41,15 @@ import org.springframework.web.socket.messaging.SessionDisconnectEvent;
* {@link WebSocketSession} is closed.
* </p>
*
*
* @author Rob Winch
* @author Mark Anderson
* @since 1.0
*/
public final class WebSocketRegistryListener
implements ApplicationListener<ApplicationEvent> {
public final class WebSocketRegistryListener implements ApplicationListener<ApplicationEvent> {
private static final Log logger = LogFactory.getLog(WebSocketRegistryListener.class);
static final CloseStatus SESSION_EXPIRED_STATUS = new CloseStatus(
CloseStatus.POLICY_VIOLATION.getCode(),
static final CloseStatus SESSION_EXPIRED_STATUS = new CloseStatus(CloseStatus.POLICY_VIOLATION.getCode(),
"This connection was established under an authenticated HTTP Session that has expired");
private final ConcurrentHashMap<String, Map<String, WebSocketSession>> httpSessionIdToWsSessions = new ConcurrentHashMap<>();
@@ -72,8 +69,7 @@ public final class WebSocketRegistryListener
Map<String, Object> sessionAttributes = SimpMessageHeaderAccessor
.getSessionAttributes(e.getMessage().getHeaders());
String httpSessionId = (sessionAttributes != null)
? SessionRepositoryMessageInterceptor.getSessionId(sessionAttributes)
: null;
? SessionRepositoryMessageInterceptor.getSessionId(sessionAttributes) : null;
afterConnectionClosed(httpSessionId, e.getSessionId());
}
}
@@ -98,8 +94,7 @@ public final class WebSocketRegistryListener
return;
}
Map<String, WebSocketSession> sessions = this.httpSessionIdToWsSessions
.get(httpSessionId);
Map<String, WebSocketSession> sessions = this.httpSessionIdToWsSessions.get(httpSessionId);
if (sessions != null) {
boolean result = sessions.remove(wsSessionId) != null;
if (logger.isDebugEnabled()) {
@@ -108,16 +103,15 @@ public final class WebSocketRegistryListener
if (sessions.isEmpty()) {
this.httpSessionIdToWsSessions.remove(httpSessionId);
if (logger.isDebugEnabled()) {
logger.debug("Removed the corresponding HTTP Session for "
+ wsSessionId + " since it contained no WebSocket mappings");
logger.debug("Removed the corresponding HTTP Session for " + wsSessionId
+ " since it contained no WebSocket mappings");
}
}
}
}
private void registerWsSession(String httpSessionId, WebSocketSession wsSession) {
Map<String, WebSocketSession> sessions = this.httpSessionIdToWsSessions
.get(httpSessionId);
Map<String, WebSocketSession> sessions = this.httpSessionIdToWsSessions.get(httpSessionId);
if (sessions == null) {
sessions = new ConcurrentHashMap<>();
this.httpSessionIdToWsSessions.putIfAbsent(httpSessionId, sessions);
@@ -127,25 +121,22 @@ public final class WebSocketRegistryListener
}
private void closeWsSessions(String httpSessionId) {
Map<String, WebSocketSession> sessionsToClose = this.httpSessionIdToWsSessions
.remove(httpSessionId);
Map<String, WebSocketSession> sessionsToClose = this.httpSessionIdToWsSessions.remove(httpSessionId);
if (sessionsToClose == null) {
return;
}
if (logger.isDebugEnabled()) {
logger.debug(
"Closing WebSocket connections associated to expired HTTP Session "
+ httpSessionId);
logger.debug("Closing WebSocket connections associated to expired HTTP Session " + httpSessionId);
}
for (WebSocketSession toClose : sessionsToClose.values()) {
try {
toClose.close(SESSION_EXPIRED_STATUS);
}
catch (IOException ex) {
logger.debug(
"Failed to close WebSocketSession (this is nothing to worry about but for debugging only)",
logger.debug("Failed to close WebSocketSession (this is nothing to worry about but for debugging only)",
ex);
}
}
}
}

View File

@@ -1,5 +1,5 @@
/*
* Copyright 2014-2018 the original author or authors.
* Copyright 2014-2019 the original author or authors.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
@@ -72,15 +72,13 @@ public final class SessionRepositoryMessageInterceptor<S extends Session>
/**
* Creates a new instance.
*
* @param sessionRepository the {@link SessionRepository} to use. Cannot be null.
*/
public SessionRepositoryMessageInterceptor(SessionRepository<S> sessionRepository) {
Assert.notNull(sessionRepository, "sessionRepository cannot be null");
this.sessionRepository = sessionRepository;
this.matchingMessageTypes = EnumSet.of(SimpMessageType.CONNECT,
SimpMessageType.MESSAGE, SimpMessageType.SUBSCRIBE,
SimpMessageType.UNSUBSCRIBE);
this.matchingMessageTypes = EnumSet.of(SimpMessageType.CONNECT, SimpMessageType.MESSAGE,
SimpMessageType.SUBSCRIBE, SimpMessageType.UNSUBSCRIBE);
}
/**
@@ -94,14 +92,12 @@ public final class SessionRepositoryMessageInterceptor<S extends Session>
* The default is: SimpMessageType.CONNECT, SimpMessageType.MESSAGE,
* SimpMessageType.SUBSCRIBE, SimpMessageType.UNSUBSCRIBE.
* </p>
*
* @param matchingMessageTypes the {@link SimpMessageType} to match on in
* {@link #preSend(Message, MessageChannel)}, else the {@link Message} is continued
* without accessing or updating the {@link Session}
*/
public void setMatchingMessageTypes(Set<SimpMessageType> matchingMessageTypes) {
Assert.notEmpty(matchingMessageTypes,
"matchingMessageTypes cannot be null or empty");
Assert.notEmpty(matchingMessageTypes, "matchingMessageTypes cannot be null or empty");
this.matchingMessageTypes = matchingMessageTypes;
}
@@ -110,16 +106,12 @@ public final class SessionRepositoryMessageInterceptor<S extends Session>
if (message == null) {
return message;
}
SimpMessageType messageType = SimpMessageHeaderAccessor
.getMessageType(message.getHeaders());
SimpMessageType messageType = SimpMessageHeaderAccessor.getMessageType(message.getHeaders());
if (!this.matchingMessageTypes.contains(messageType)) {
return message;
}
Map<String, Object> sessionHeaders = SimpMessageHeaderAccessor
.getSessionAttributes(message.getHeaders());
String sessionId = (sessionHeaders != null)
? (String) sessionHeaders.get(SPRING_SESSION_ID_ATTR_NAME)
: null;
Map<String, Object> sessionHeaders = SimpMessageHeaderAccessor.getSessionAttributes(message.getHeaders());
String sessionId = (sessionHeaders != null) ? (String) sessionHeaders.get(SPRING_SESSION_ID_ATTR_NAME) : null;
if (sessionId != null) {
S session = this.sessionRepository.findById(sessionId);
if (session != null) {
@@ -132,8 +124,8 @@ public final class SessionRepositoryMessageInterceptor<S extends Session>
}
@Override
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
Map<String, Object> attributes) throws Exception {
if (request instanceof ServletServerHttpRequest) {
ServletServerHttpRequest servletRequest = (ServletServerHttpRequest) request;
HttpSession session = servletRequest.getServletRequest().getSession(false);
@@ -145,8 +137,8 @@ public final class SessionRepositoryMessageInterceptor<S extends Session>
}
@Override
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
WebSocketHandler wsHandler, Exception exception) {
public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response, WebSocketHandler wsHandler,
Exception exception) {
}
public static String getSessionId(Map<String, Object> attributes) {
@@ -156,4 +148,5 @@ public final class SessionRepositoryMessageInterceptor<S extends Session>
public static void setSessionId(Map<String, Object> attributes, String sessionId) {
attributes.put(SPRING_SESSION_ID_ATTR_NAME, sessionId);
}
}

View File

@@ -29,20 +29,20 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link MapSessionRepository}.
*/
public class MapSessionRepositoryTests {
class MapSessionRepositoryTests {
private MapSessionRepository repository;
private MapSession session;
@BeforeEach
public void setup() {
void setup() {
this.repository = new MapSessionRepository(new ConcurrentHashMap<>());
this.session = new MapSession();
}
@Test
public void getSessionExpired() {
void getSessionExpired() {
this.session.setMaxInactiveInterval(Duration.ofSeconds(1));
this.session.setLastAccessedTime(Instant.now().minus(5, ChronoUnit.MINUTES));
this.repository.save(this.session);
@@ -51,29 +51,25 @@ public class MapSessionRepositoryTests {
}
@Test
public void createSessionDefaultExpiration() {
void createSessionDefaultExpiration() {
Session session = this.repository.createSession();
assertThat(session).isInstanceOf(MapSession.class);
assertThat(session.getMaxInactiveInterval())
.isEqualTo(new MapSession().getMaxInactiveInterval());
assertThat(session.getMaxInactiveInterval()).isEqualTo(new MapSession().getMaxInactiveInterval());
}
@Test
public void createSessionCustomDefaultExpiration() {
final Duration expectedMaxInterval = new MapSession().getMaxInactiveInterval()
.plusSeconds(10);
this.repository.setDefaultMaxInactiveInterval(
(int) expectedMaxInterval.getSeconds());
void createSessionCustomDefaultExpiration() {
final Duration expectedMaxInterval = new MapSession().getMaxInactiveInterval().plusSeconds(10);
this.repository.setDefaultMaxInactiveInterval((int) expectedMaxInterval.getSeconds());
Session session = this.repository.createSession();
assertThat(session.getMaxInactiveInterval())
.isEqualTo(expectedMaxInterval);
assertThat(session.getMaxInactiveInterval()).isEqualTo(expectedMaxInterval);
}
@Test
public void changeSessionIdWhenNotYetSaved() {
void changeSessionIdWhenNotYetSaved() {
MapSession createSession = this.repository.createSession();
String originalId = createSession.getId();
@@ -86,7 +82,7 @@ public class MapSessionRepositoryTests {
}
@Test
public void changeSessionIdWhenSaved() {
void changeSessionIdWhenSaved() {
MapSession createSession = this.repository.createSession();
this.repository.save(createSession);
@@ -101,7 +97,7 @@ public class MapSessionRepositoryTests {
}
@Test // gh-1120
public void getAttributeNamesAndRemove() {
void getAttributeNamesAndRemove() {
MapSession session = this.repository.createSession();
session.setAttribute("attribute1", "value1");
session.setAttribute("attribute2", "value2");

View File

@@ -26,38 +26,37 @@ import org.junit.jupiter.api.Test;
import static org.assertj.core.api.Assertions.assertThat;
import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException;
public class MapSessionTests {
class MapSessionTests {
private MapSession session;
@BeforeEach
public void setup() {
void setup() {
this.session = new MapSession();
this.session.setLastAccessedTime(Instant.ofEpochMilli(1413258262962L));
}
@Test
public void constructorNullSession() {
assertThatIllegalArgumentException()
.isThrownBy(() -> new MapSession((Session) null))
void constructorNullSession() {
assertThatIllegalArgumentException().isThrownBy(() -> new MapSession((Session) null))
.withMessage("session cannot be null");
}
@Test
public void getAttributeWhenNullThenNull() {
void getAttributeWhenNullThenNull() {
String result = this.session.getAttribute("attrName");
assertThat(result).isNull();
}
@Test
public void getAttributeOrDefaultWhenNullThenDefaultValue() {
void getAttributeOrDefaultWhenNullThenDefaultValue() {
String defaultValue = "default";
String result = this.session.getAttributeOrDefault("attrName", defaultValue);
assertThat(result).isEqualTo(defaultValue);
}
@Test
public void getAttributeOrDefaultWhenNotNullThenDefaultValue() {
void getAttributeOrDefaultWhenNotNullThenDefaultValue() {
String defaultValue = "default";
String attrValue = "value";
String attrName = "attrName";
@@ -69,14 +68,13 @@ public class MapSessionTests {
}
@Test
public void getRequiredAttributeWhenNullThenException() {
assertThatIllegalArgumentException()
.isThrownBy(() -> this.session.getRequiredAttribute("attrName"))
void getRequiredAttributeWhenNullThenException() {
assertThatIllegalArgumentException().isThrownBy(() -> this.session.getRequiredAttribute("attrName"))
.withMessage("Required attribute 'attrName' is missing.");
}
@Test
public void getRequiredAttributeWhenNotNullThenReturns() {
void getRequiredAttributeWhenNotNullThenReturns() {
String attrValue = "value";
String attrName = "attrName";
this.session.setAttribute(attrName, attrValue);
@@ -90,7 +88,7 @@ public class MapSessionTests {
* Ensure conforms to the javadoc of {@link Session}
*/
@Test
public void setAttributeNullObjectRemoves() {
void setAttributeNullObjectRemoves() {
String attr = "attr";
this.session.setAttribute(attr, new Object());
this.session.setAttribute(attr, null);
@@ -98,43 +96,43 @@ public class MapSessionTests {
}
@Test
public void equalsNonSessionFalse() {
void equalsNonSessionFalse() {
assertThat(this.session.equals(new Object())).isFalse();
}
@Test
public void equalsCustomSession() {
void equalsCustomSession() {
CustomSession other = new CustomSession();
this.session.setId(other.getId());
assertThat(this.session.equals(other)).isTrue();
}
@Test
public void hashCodeEqualsIdHashCode() {
void hashCodeEqualsIdHashCode() {
this.session.setId("constantId");
assertThat(this.session.hashCode()).isEqualTo(this.session.getId().hashCode());
}
@Test
public void isExpiredExact() {
void isExpiredExact() {
Instant now = Instant.ofEpochMilli(1413260062962L);
assertThat(this.session.isExpired(now)).isTrue();
}
@Test
public void isExpiredOneMsTooSoon() {
void isExpiredOneMsTooSoon() {
Instant now = Instant.ofEpochMilli(1413260062961L);
assertThat(this.session.isExpired(now)).isFalse();
}
@Test
public void isExpiredOneMsAfter() {
void isExpiredOneMsAfter() {
Instant now = Instant.ofEpochMilli(1413260062963L);
assertThat(this.session.isExpired(now)).isTrue();
}
@Test // gh-1120
public void getAttributeNamesAndRemove() {
void getAttributeNamesAndRemove() {
this.session.setAttribute("attribute1", "value1");
this.session.setAttribute("attribute2", "value2");
@@ -206,6 +204,7 @@ public class MapSessionTests {
public boolean isExpired() {
return false;
}
}
}

View File

@@ -35,20 +35,20 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
* @author Rob Winch
* @since 2.0
*/
public class ReactiveMapSessionRepositoryTests {
class ReactiveMapSessionRepositoryTests {
private ReactiveMapSessionRepository repository;
private MapSession session;
@BeforeEach
public void setup() {
void setup() {
this.repository = new ReactiveMapSessionRepository(new HashMap<>());
this.session = new MapSession("session-id");
}
@Test
public void constructorMapThenFound() {
void constructorMapThenFound() {
Map<String, Session> sessions = new HashMap<>();
sessions.put(this.session.getId(), this.session);
this.repository = new ReactiveMapSessionRepository(sessions);
@@ -59,21 +59,20 @@ public class ReactiveMapSessionRepositoryTests {
}
@Test
public void constructorMapWhenNullThenThrowsIllegalArgumentException() {
assertThatIllegalArgumentException()
.isThrownBy(() -> new ReactiveMapSessionRepository(null))
void constructorMapWhenNullThenThrowsIllegalArgumentException() {
assertThatIllegalArgumentException().isThrownBy(() -> new ReactiveMapSessionRepository(null))
.withMessage("sessions cannot be null");
}
@Test
public void saveWhenNoSubscribersThenNotFound() {
void saveWhenNoSubscribersThenNotFound() {
this.repository.save(this.session);
assertThat(this.repository.findById(this.session.getId()).block()).isNull();
}
@Test
public void saveWhenSubscriberThenFound() {
void saveWhenSubscriberThenFound() {
this.repository.save(this.session).block();
Session findByIdSession = this.repository.findById(this.session.getId()).block();
@@ -82,7 +81,7 @@ public class ReactiveMapSessionRepositoryTests {
}
@Test
public void findByIdWhenExpiredRemovesFromSessionMap() {
void findByIdWhenExpiredRemovesFromSessionMap() {
this.session.setMaxInactiveInterval(Duration.ofMinutes(1));
this.session.setLastAccessedTime(Instant.now().minus(5, ChronoUnit.MINUTES));
@@ -95,20 +94,17 @@ public class ReactiveMapSessionRepositoryTests {
}
@Test
public void createSessionWhenDefaultMaxInactiveIntervalThenDefaultMaxInactiveInterval() {
void createSessionWhenDefaultMaxInactiveIntervalThenDefaultMaxInactiveInterval() {
Session session = this.repository.createSession().block();
assertThat(session).isInstanceOf(MapSession.class);
assertThat(session.getMaxInactiveInterval())
.isEqualTo(new MapSession().getMaxInactiveInterval());
assertThat(session.getMaxInactiveInterval()).isEqualTo(new MapSession().getMaxInactiveInterval());
}
@Test
public void createSessionWhenCustomMaxInactiveIntervalThenCustomMaxInactiveInterval() {
final Duration expectedMaxInterval = new MapSession().getMaxInactiveInterval()
.plusSeconds(10);
this.repository
.setDefaultMaxInactiveInterval((int) expectedMaxInterval.getSeconds());
void createSessionWhenCustomMaxInactiveIntervalThenCustomMaxInactiveInterval() {
final Duration expectedMaxInterval = new MapSession().getMaxInactiveInterval().plusSeconds(10);
this.repository.setDefaultMaxInactiveInterval((int) expectedMaxInterval.getSeconds());
Session session = this.repository.createSession().block();
@@ -116,7 +112,7 @@ public class ReactiveMapSessionRepositoryTests {
}
@Test
public void changeSessionIdWhenNotYetSaved() {
void changeSessionIdWhenNotYetSaved() {
MapSession createSession = this.repository.createSession().block();
String originalId = createSession.getId();
@@ -129,7 +125,7 @@ public class ReactiveMapSessionRepositoryTests {
}
@Test
public void changeSessionIdWhenSaved() {
void changeSessionIdWhenSaved() {
MapSession createSession = this.repository.createSession().block();
this.repository.save(createSession).block();
@@ -144,7 +140,7 @@ public class ReactiveMapSessionRepositoryTests {
}
@Test // gh-1120
public void getAttributeNamesAndRemove() {
void getAttributeNamesAndRemove() {
MapSession session = this.repository.createSession().block();
session.setAttribute("attribute1", "value1");
session.setAttribute("attribute2", "value2");

View File

@@ -61,7 +61,7 @@ import static org.mockito.Mockito.verify;
@ExtendWith(SpringExtension.class)
@ContextConfiguration
@WebAppConfiguration
public class EnableSpringHttpSessionCustomCookieSerializerTests {
class EnableSpringHttpSessionCustomCookieSerializerTests {
@Autowired
private MockHttpServletRequest request;
@@ -81,7 +81,7 @@ public class EnableSpringHttpSessionCustomCookieSerializerTests {
private CookieSerializer cookieSerializer;
@BeforeEach
public void setup() {
void setup() {
this.chain = new MockFilterChain();
reset(this.sessionRepository);
@@ -89,12 +89,11 @@ public class EnableSpringHttpSessionCustomCookieSerializerTests {
}
@Test
public void usesReadSessionIds() throws Exception {
void usesReadSessionIds() throws Exception {
String sessionId = "sessionId";
given(this.cookieSerializer.readCookieValues(any(HttpServletRequest.class)))
.willReturn(Collections.singletonList(sessionId));
given(this.sessionRepository.findById(anyString()))
.willReturn(new MapSession(sessionId));
given(this.sessionRepository.findById(anyString())).willReturn(new MapSession(sessionId));
this.sessionRepositoryFilter.doFilter(this.request, this.response, this.chain);
@@ -102,19 +101,18 @@ public class EnableSpringHttpSessionCustomCookieSerializerTests {
}
@Test
public void usesWrite() throws Exception {
void usesWrite() throws Exception {
given(this.sessionRepository.createSession()).willReturn(new MapSession());
this.sessionRepositoryFilter.doFilter(this.request, this.response,
new MockFilterChain() {
this.sessionRepositoryFilter.doFilter(this.request, this.response, new MockFilterChain() {
@Override
public void doFilter(ServletRequest request, ServletResponse response)
throws IOException, ServletException {
((HttpServletRequest) request).getSession();
super.doFilter(request, response);
}
});
@Override
public void doFilter(ServletRequest request, ServletResponse response)
throws IOException, ServletException {
((HttpServletRequest) request).getSession();
super.doFilter(request, response);
}
});
verify(this.cookieSerializer).writeCookieValue(any(CookieValue.class));
}

View File

@@ -45,12 +45,12 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
*
* @author Vedran Pavic
*/
public class SpringHttpSessionConfigurationTests {
class SpringHttpSessionConfigurationTests {
private AnnotationConfigApplicationContext context = new AnnotationConfigApplicationContext();
@AfterEach
public void closeContext() {
void closeContext() {
if (this.context != null) {
this.context.close();
}
@@ -62,28 +62,26 @@ public class SpringHttpSessionConfigurationTests {
}
@Test
public void noSessionRepositoryConfiguration() {
void noSessionRepositoryConfiguration() {
assertThatExceptionOfType(UnsatisfiedDependencyException.class)
.isThrownBy(() -> registerAndRefresh(EmptyConfiguration.class))
.withMessageContaining("org.springframework.session.SessionRepository");
}
@Test
public void defaultConfiguration() {
void defaultConfiguration() {
registerAndRefresh(DefaultConfiguration.class);
assertThat(this.context.getBean(SessionEventHttpSessionListenerAdapter.class))
.isNotNull();
assertThat(this.context.getBean(SessionEventHttpSessionListenerAdapter.class)).isNotNull();
assertThat(this.context.getBean(SessionRepositoryFilter.class)).isNotNull();
assertThat(this.context.getBean(SessionRepository.class)).isNotNull();
}
@Test
public void sessionCookieConfigConfiguration() {
void sessionCookieConfigConfiguration() {
registerAndRefresh(SessionCookieConfigConfiguration.class);
SessionRepositoryFilter sessionRepositoryFilter = this.context
.getBean(SessionRepositoryFilter.class);
SessionRepositoryFilter sessionRepositoryFilter = this.context.getBean(SessionRepositoryFilter.class);
assertThat(sessionRepositoryFilter).isNotNull();
CookieHttpSessionIdResolver httpSessionIdResolver = (CookieHttpSessionIdResolver) ReflectionTestUtils
.getField(sessionRepositoryFilter, "httpSessionIdResolver");
@@ -91,22 +89,17 @@ public class SpringHttpSessionConfigurationTests {
DefaultCookieSerializer cookieSerializer = (DefaultCookieSerializer) ReflectionTestUtils
.getField(httpSessionIdResolver, "cookieSerializer");
assertThat(cookieSerializer).isNotNull();
assertThat(ReflectionTestUtils.getField(cookieSerializer, "cookieName"))
.isEqualTo("test-name");
assertThat(ReflectionTestUtils.getField(cookieSerializer, "cookiePath"))
.isEqualTo("test-path");
assertThat(ReflectionTestUtils.getField(cookieSerializer, "cookieMaxAge"))
.isEqualTo(600);
assertThat(ReflectionTestUtils.getField(cookieSerializer, "domainName"))
.isEqualTo("test-domain");
assertThat(ReflectionTestUtils.getField(cookieSerializer, "cookieName")).isEqualTo("test-name");
assertThat(ReflectionTestUtils.getField(cookieSerializer, "cookiePath")).isEqualTo("test-path");
assertThat(ReflectionTestUtils.getField(cookieSerializer, "cookieMaxAge")).isEqualTo(600);
assertThat(ReflectionTestUtils.getField(cookieSerializer, "domainName")).isEqualTo("test-domain");
}
@Test
public void rememberMeServicesConfiguration() {
void rememberMeServicesConfiguration() {
registerAndRefresh(RememberMeServicesConfiguration.class);
SessionRepositoryFilter sessionRepositoryFilter = this.context
.getBean(SessionRepositoryFilter.class);
SessionRepositoryFilter sessionRepositoryFilter = this.context.getBean(SessionRepositoryFilter.class);
assertThat(sessionRepositoryFilter).isNotNull();
CookieHttpSessionIdResolver httpSessionIdResolver = (CookieHttpSessionIdResolver) ReflectionTestUtils
.getField(sessionRepositoryFilter, "httpSessionIdResolver");
@@ -114,14 +107,14 @@ public class SpringHttpSessionConfigurationTests {
DefaultCookieSerializer cookieSerializer = (DefaultCookieSerializer) ReflectionTestUtils
.getField(httpSessionIdResolver, "cookieSerializer");
assertThat(cookieSerializer).isNotNull();
assertThat(ReflectionTestUtils.getField(cookieSerializer,
"rememberMeRequestAttribute")).isEqualTo(
SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR);
assertThat(ReflectionTestUtils.getField(cookieSerializer, "rememberMeRequestAttribute"))
.isEqualTo(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR);
}
@Configuration
@EnableSpringHttpSession
static class EmptyConfiguration {
}
static class BaseConfiguration {
@@ -136,6 +129,7 @@ public class SpringHttpSessionConfigurationTests {
@Configuration
@EnableSpringHttpSession
static class DefaultConfiguration extends BaseConfiguration {
}
@Configuration

View File

@@ -41,18 +41,19 @@ import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
*
* @author Greg Turnquist
*/
public class SpringWebSessionConfigurationTests {
class SpringWebSessionConfigurationTests {
private AnnotationConfigApplicationContext context;
@AfterEach
public void cleanup() {
void cleanup() {
if (this.context != null) {
this.context.close();
}
}
@Test
public void enableSpringWebSessionConfiguresThings() {
void enableSpringWebSessionConfiguresThings() {
this.context = new AnnotationConfigApplicationContext();
this.context.register(GoodConfig.class);
@@ -69,19 +70,18 @@ public class SpringWebSessionConfigurationTests {
}
@Test
public void missingReactiveSessionRepositoryBreaksAppContext() {
void missingReactiveSessionRepositoryBreaksAppContext() {
this.context = new AnnotationConfigApplicationContext();
this.context.register(BadConfig.class);
assertThatExceptionOfType(UnsatisfiedDependencyException.class)
.isThrownBy(this.context::refresh)
.withMessageContaining("Error creating bean with name 'webSessionManager'")
.withMessageContaining("No qualifying bean of type '" + ReactiveSessionRepository.class.getCanonicalName());
assertThatExceptionOfType(UnsatisfiedDependencyException.class).isThrownBy(this.context::refresh)
.withMessageContaining("Error creating bean with name 'webSessionManager'").withMessageContaining(
"No qualifying bean of type '" + ReactiveSessionRepository.class.getCanonicalName());
}
@Test
public void defaultSessionIdResolverShouldBeCookieBased() {
void defaultSessionIdResolverShouldBeCookieBased() {
this.context = new AnnotationConfigApplicationContext();
this.context.register(GoodConfig.class);
@@ -92,7 +92,7 @@ public class SpringWebSessionConfigurationTests {
}
@Test
public void providedSessionIdResolverShouldBePickedUpAutomatically() {
void providedSessionIdResolverShouldBePickedUpAutomatically() {
this.context = new AnnotationConfigApplicationContext();
this.context.register(OverrideSessionIdResolver.class);
@@ -109,12 +109,14 @@ public class SpringWebSessionConfigurationTests {
static class GoodConfig {
/**
* Use Reactor-friendly, {@link java.util.Map}-backed {@link ReactiveSessionRepository} for test purposes.
* Use Reactor-friendly, {@link java.util.Map}-backed
* {@link ReactiveSessionRepository} for test purposes.
*/
@Bean
ReactiveSessionRepository<?> reactiveSessionRepository() {
return new ReactiveMapSessionRepository(new HashMap<>());
}
}
/**
@@ -137,6 +139,7 @@ public class SpringWebSessionConfigurationTests {
WebSessionIdResolver alternateWebSessionIdResolver() {
return new HeaderWebSessionIdResolver();
}
}
}

View File

@@ -46,7 +46,7 @@ import static org.mockito.BDDMockito.when;
/**
* Tests for {@link SpringSessionBackedSessionRegistry}.
*/
public class SpringSessionBackedSessionRegistryTest {
class SpringSessionBackedSessionRegistryTest {
private static final String SESSION_ID = "sessionId";
@@ -54,8 +54,7 @@ public class SpringSessionBackedSessionRegistryTest {
private static final String USER_NAME = "userName";
private static final User PRINCIPAL = new User(USER_NAME, "password",
Collections.emptyList());
private static final User PRINCIPAL = new User(USER_NAME, "password", Collections.emptyList());
private static final Instant NOW = Instant.now();
@@ -71,74 +70,63 @@ public class SpringSessionBackedSessionRegistryTest {
}
@Test
public void sessionInformationForExistingSession() {
void sessionInformationForExistingSession() {
Session session = createSession(SESSION_ID, USER_NAME, NOW);
when(this.sessionRepository.findById(SESSION_ID)).thenReturn(session);
SessionInformation sessionInfo = this.sessionRegistry
.getSessionInformation(SESSION_ID);
SessionInformation sessionInfo = this.sessionRegistry.getSessionInformation(SESSION_ID);
assertThat(sessionInfo.getSessionId()).isEqualTo(SESSION_ID);
assertThat(
sessionInfo.getLastRequest().toInstant().truncatedTo(ChronoUnit.MILLIS))
.isEqualTo(NOW.truncatedTo(ChronoUnit.MILLIS));
assertThat(sessionInfo.getLastRequest().toInstant().truncatedTo(ChronoUnit.MILLIS))
.isEqualTo(NOW.truncatedTo(ChronoUnit.MILLIS));
assertThat(sessionInfo.getPrincipal()).isEqualTo(USER_NAME);
assertThat(sessionInfo.isExpired()).isFalse();
}
@Test
public void sessionInformationForExpiredSession() {
void sessionInformationForExpiredSession() {
Session session = createSession(SESSION_ID, USER_NAME, NOW);
session.setAttribute(SpringSessionBackedSessionInformation.EXPIRED_ATTR,
Boolean.TRUE);
session.setAttribute(SpringSessionBackedSessionInformation.EXPIRED_ATTR, Boolean.TRUE);
when(this.sessionRepository.findById(SESSION_ID)).thenReturn(session);
SessionInformation sessionInfo = this.sessionRegistry
.getSessionInformation(SESSION_ID);
SessionInformation sessionInfo = this.sessionRegistry.getSessionInformation(SESSION_ID);
assertThat(sessionInfo.getSessionId()).isEqualTo(SESSION_ID);
assertThat(
sessionInfo.getLastRequest().toInstant().truncatedTo(ChronoUnit.MILLIS))
assertThat(sessionInfo.getLastRequest().toInstant().truncatedTo(ChronoUnit.MILLIS))
.isEqualTo(NOW.truncatedTo(ChronoUnit.MILLIS));
assertThat(sessionInfo.getPrincipal()).isEqualTo(USER_NAME);
assertThat(sessionInfo.isExpired()).isTrue();
}
@Test
public void noSessionInformationForMissingSession() {
assertThat(this.sessionRegistry.getSessionInformation("nonExistingSessionId"))
.isNull();
void noSessionInformationForMissingSession() {
assertThat(this.sessionRegistry.getSessionInformation("nonExistingSessionId")).isNull();
}
@Test
public void getAllSessions() {
void getAllSessions() {
setUpSessions();
List<SessionInformation> allSessionInfos = this.sessionRegistry
.getAllSessions(PRINCIPAL, true);
List<SessionInformation> allSessionInfos = this.sessionRegistry.getAllSessions(PRINCIPAL, true);
assertThat(allSessionInfos).extracting("sessionId").containsExactly(SESSION_ID,
SESSION_ID2);
assertThat(allSessionInfos).extracting("sessionId").containsExactly(SESSION_ID, SESSION_ID2);
}
@Test
public void getNonExpiredSessions() {
void getNonExpiredSessions() {
setUpSessions();
List<SessionInformation> nonExpiredSessionInfos = this.sessionRegistry
.getAllSessions(PRINCIPAL, false);
List<SessionInformation> nonExpiredSessionInfos = this.sessionRegistry.getAllSessions(PRINCIPAL, false);
assertThat(nonExpiredSessionInfos).extracting("sessionId")
.containsExactly(SESSION_ID2);
assertThat(nonExpiredSessionInfos).extracting("sessionId").containsExactly(SESSION_ID2);
}
@Test
public void expireNow() {
void expireNow() {
Session session = createSession(SESSION_ID, USER_NAME, NOW);
when(this.sessionRepository.findById(SESSION_ID)).thenReturn(session);
SessionInformation sessionInfo = this.sessionRegistry
.getSessionInformation(SESSION_ID);
SessionInformation sessionInfo = this.sessionRegistry.getSessionInformation(SESSION_ID);
assertThat(sessionInfo.isExpired()).isFalse();
sessionInfo.expireNow();
@@ -146,13 +134,11 @@ public class SpringSessionBackedSessionRegistryTest {
assertThat(sessionInfo.isExpired()).isTrue();
ArgumentCaptor<Session> captor = ArgumentCaptor.forClass(Session.class);
verify(this.sessionRepository).save(captor.capture());
assertThat(captor.getValue().<Boolean>getAttribute(
SpringSessionBackedSessionInformation.EXPIRED_ATTR))
.isEqualTo(Boolean.TRUE);
assertThat(captor.getValue().<Boolean>getAttribute(SpringSessionBackedSessionInformation.EXPIRED_ATTR))
.isEqualTo(Boolean.TRUE);
}
private Session createSession(String sessionId, String userName,
Instant lastAccessed) {
private Session createSession(String sessionId, String userName, Instant lastAccessed) {
MapSession session = new MapSession(sessionId);
session.setLastAccessedTime(lastAccessed);
Authentication authentication = mock(Authentication.class);
@@ -165,14 +151,12 @@ public class SpringSessionBackedSessionRegistryTest {
private void setUpSessions() {
Session session1 = createSession(SESSION_ID, USER_NAME, NOW);
session1.setAttribute(SpringSessionBackedSessionInformation.EXPIRED_ATTR,
Boolean.TRUE);
session1.setAttribute(SpringSessionBackedSessionInformation.EXPIRED_ATTR, Boolean.TRUE);
Session session2 = createSession(SESSION_ID2, USER_NAME, NOW);
Map<String, Session> sessions = new LinkedHashMap<>();
sessions.put(session1.getId(), session1);
sessions.put(session2.getId(), session2);
when(this.sessionRepository.findByPrincipalName(USER_NAME))
.thenReturn(sessions);
when(this.sessionRepository.findByPrincipalName(USER_NAME)).thenReturn(sessions);
}
}

View File

@@ -40,60 +40,50 @@ import static org.mockito.Mockito.verifyZeroInteractions;
*
* @author Vedran Pavic
*/
public class SpringSessionRememberMeServicesTests {
class SpringSessionRememberMeServicesTests {
private SpringSessionRememberMeServices rememberMeServices;
@Test
public void create() {
void create() {
this.rememberMeServices = new SpringSessionRememberMeServices();
assertThat(ReflectionTestUtils.getField(this.rememberMeServices,
"rememberMeParameterName")).isEqualTo("remember-me");
assertThat(
ReflectionTestUtils.getField(this.rememberMeServices, "alwaysRemember"))
.isEqualTo(false);
assertThat(
ReflectionTestUtils.getField(this.rememberMeServices, "validitySeconds"))
.isEqualTo(2592000);
assertThat(ReflectionTestUtils.getField(this.rememberMeServices, "rememberMeParameterName"))
.isEqualTo("remember-me");
assertThat(ReflectionTestUtils.getField(this.rememberMeServices, "alwaysRemember")).isEqualTo(false);
assertThat(ReflectionTestUtils.getField(this.rememberMeServices, "validitySeconds")).isEqualTo(2592000);
}
@Test
public void createWithCustomParameter() {
void createWithCustomParameter() {
this.rememberMeServices = new SpringSessionRememberMeServices();
this.rememberMeServices.setRememberMeParameterName("test-param");
assertThat(ReflectionTestUtils.getField(this.rememberMeServices,
"rememberMeParameterName")).isEqualTo("test-param");
assertThat(ReflectionTestUtils.getField(this.rememberMeServices, "rememberMeParameterName"))
.isEqualTo("test-param");
}
@Test
public void createWithNullParameter() {
void createWithNullParameter() {
this.rememberMeServices = new SpringSessionRememberMeServices();
assertThatIllegalArgumentException()
.isThrownBy(
() -> this.rememberMeServices.setRememberMeParameterName(null))
assertThatIllegalArgumentException().isThrownBy(() -> this.rememberMeServices.setRememberMeParameterName(null))
.withMessage("rememberMeParameterName cannot be empty or null");
}
@Test
public void createWithAlwaysRemember() {
void createWithAlwaysRemember() {
this.rememberMeServices = new SpringSessionRememberMeServices();
this.rememberMeServices.setAlwaysRemember(true);
assertThat(
ReflectionTestUtils.getField(this.rememberMeServices, "alwaysRemember"))
.isEqualTo(true);
assertThat(ReflectionTestUtils.getField(this.rememberMeServices, "alwaysRemember")).isEqualTo(true);
}
@Test
public void createWithCustomValidity() {
void createWithCustomValidity() {
this.rememberMeServices = new SpringSessionRememberMeServices();
this.rememberMeServices.setValiditySeconds(100000);
assertThat(
ReflectionTestUtils.getField(this.rememberMeServices, "validitySeconds"))
.isEqualTo(100000);
assertThat(ReflectionTestUtils.getField(this.rememberMeServices, "validitySeconds")).isEqualTo(100000);
}
@Test
public void autoLogin() {
void autoLogin() {
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
this.rememberMeServices = new SpringSessionRememberMeServices();
@@ -103,7 +93,7 @@ public class SpringSessionRememberMeServicesTests {
// gh-752
@Test
public void loginFailRemoveSecurityContext() {
void loginFailRemoveSecurityContext() {
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
HttpSession session = mock(HttpSession.class);
@@ -111,13 +101,12 @@ public class SpringSessionRememberMeServicesTests {
this.rememberMeServices = new SpringSessionRememberMeServices();
this.rememberMeServices.loginFail(request, response);
verify(request, times(1)).getSession(eq(false));
verify(session, times(1)).removeAttribute(
HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
verify(session, times(1)).removeAttribute(HttpSessionSecurityContextRepository.SPRING_SECURITY_CONTEXT_KEY);
verifyZeroInteractions(request, response, session);
}
@Test
public void loginSuccess() {
void loginSuccess() {
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
Authentication authentication = mock(Authentication.class);
@@ -128,14 +117,13 @@ public class SpringSessionRememberMeServicesTests {
this.rememberMeServices.loginSuccess(request, response, authentication);
verify(request, times(1)).getParameter(eq("remember-me"));
verify(request, times(1)).getSession();
verify(request, times(1)).setAttribute(
eq(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR), eq(true));
verify(request, times(1)).setAttribute(eq(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR), eq(true));
verify(session, times(1)).setMaxInactiveInterval(eq(2592000));
verifyZeroInteractions(request, response, session, authentication);
}
@Test
public void loginSuccessWithCustomParameter() {
void loginSuccessWithCustomParameter() {
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
Authentication authentication = mock(Authentication.class);
@@ -147,14 +135,13 @@ public class SpringSessionRememberMeServicesTests {
this.rememberMeServices.loginSuccess(request, response, authentication);
verify(request, times(1)).getParameter(eq("test-param"));
verify(request, times(1)).getSession();
verify(request, times(1)).setAttribute(
eq(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR), eq(true));
verify(request, times(1)).setAttribute(eq(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR), eq(true));
verify(session, times(1)).setMaxInactiveInterval(eq(2592000));
verifyZeroInteractions(request, response, session, authentication);
}
@Test
public void loginSuccessWithAlwaysRemember() {
void loginSuccessWithAlwaysRemember() {
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
Authentication authentication = mock(Authentication.class);
@@ -164,14 +151,13 @@ public class SpringSessionRememberMeServicesTests {
this.rememberMeServices.setAlwaysRemember(true);
this.rememberMeServices.loginSuccess(request, response, authentication);
verify(request, times(1)).getSession();
verify(request, times(1)).setAttribute(
eq(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR), eq(true));
verify(request, times(1)).setAttribute(eq(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR), eq(true));
verify(session, times(1)).setMaxInactiveInterval(eq(2592000));
verifyZeroInteractions(request, response, session, authentication);
}
@Test
public void loginSuccessWithCustomValidity() {
void loginSuccessWithCustomValidity() {
HttpServletRequest request = mock(HttpServletRequest.class);
HttpServletResponse response = mock(HttpServletResponse.class);
Authentication authentication = mock(Authentication.class);
@@ -183,8 +169,7 @@ public class SpringSessionRememberMeServicesTests {
this.rememberMeServices.loginSuccess(request, response, authentication);
verify(request, times(1)).getParameter(eq("remember-me"));
verify(request, times(1)).getSession();
verify(request, times(1)).setAttribute(
eq(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR), eq(true));
verify(request, times(1)).setAttribute(eq(SpringSessionRememberMeServices.REMEMBER_ME_LOGIN_ATTR), eq(true));
verify(session, times(1)).setMaxInactiveInterval(eq(100000));
verifyZeroInteractions(request, response, session, authentication);
}

View File

@@ -34,17 +34,20 @@ import static org.assertj.core.api.Assertions.assertThat;
/**
* Tests for {@link CookieHttpSessionIdResolver}.
*/
public class CookieHttpSessionIdResolverTests {
class CookieHttpSessionIdResolverTests {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
private CookieHttpSessionIdResolver strategy;
private String cookieName;
private Session session;
@BeforeEach
public void setup() throws Exception {
void setup() throws Exception {
this.cookieName = "SESSION";
this.session = new MapSession();
this.request = new MockHttpServletRequest();
@@ -53,19 +56,19 @@ public class CookieHttpSessionIdResolverTests {
}
@Test
public void getRequestedSessionIdNull() throws Exception {
void getRequestedSessionIdNull() throws Exception {
assertThat(this.strategy.resolveSessionIds(this.request)).isEmpty();
}
@Test
public void getRequestedSessionIdNotNull() throws Exception {
void getRequestedSessionIdNotNull() throws Exception {
setSessionCookie(this.session.getId());
assertThat(this.strategy.resolveSessionIds(this.request))
.isEqualTo(Collections.singletonList(this.session.getId()));
}
@Test
public void getRequestedSessionIdNotNullCustomCookieName() throws Exception {
void getRequestedSessionIdNotNullCustomCookieName() throws Exception {
setCookieName("CUSTOM");
setSessionCookie(this.session.getId());
assertThat(this.strategy.resolveSessionIds(this.request))
@@ -73,13 +76,13 @@ public class CookieHttpSessionIdResolverTests {
}
@Test
public void onNewSession() throws Exception {
void onNewSession() throws Exception {
this.strategy.setSessionId(this.request, this.response, this.session.getId());
assertThat(getSessionId()).isEqualTo(this.session.getId());
}
@Test
public void onNewSessionTwiceSameId() throws Exception {
void onNewSessionTwiceSameId() throws Exception {
this.strategy.setSessionId(this.request, this.response, this.session.getId());
this.strategy.setSessionId(this.request, this.response, this.session.getId());
@@ -87,7 +90,7 @@ public class CookieHttpSessionIdResolverTests {
}
@Test
public void onNewSessionTwiceNewId() throws Exception {
void onNewSessionTwiceNewId() throws Exception {
Session newSession = new MapSession();
this.strategy.setSessionId(this.request, this.response, this.session.getId());
@@ -101,49 +104,47 @@ public class CookieHttpSessionIdResolverTests {
}
@Test
public void onNewSessionCookiePath() throws Exception {
void onNewSessionCookiePath() throws Exception {
this.request.setContextPath("/somethingunique");
this.strategy.setSessionId(this.request, this.response, this.session.getId());
Cookie sessionCookie = this.response.getCookie(this.cookieName);
assertThat(sessionCookie.getPath())
.isEqualTo(this.request.getContextPath() + "/");
assertThat(sessionCookie.getPath()).isEqualTo(this.request.getContextPath() + "/");
}
@Test
public void onNewSessionCustomCookieName() throws Exception {
void onNewSessionCustomCookieName() throws Exception {
setCookieName("CUSTOM");
this.strategy.setSessionId(this.request, this.response, this.session.getId());
assertThat(getSessionId()).isEqualTo(this.session.getId());
}
@Test
public void onDeleteSession() throws Exception {
void onDeleteSession() throws Exception {
this.strategy.expireSession(this.request, this.response);
assertThat(getSessionId()).isEmpty();
}
@Test
public void onDeleteSessionCookiePath() throws Exception {
void onDeleteSessionCookiePath() throws Exception {
this.request.setContextPath("/somethingunique");
this.strategy.expireSession(this.request, this.response);
Cookie sessionCookie = this.response.getCookie(this.cookieName);
assertThat(sessionCookie.getPath())
.isEqualTo(this.request.getContextPath() + "/");
assertThat(sessionCookie.getPath()).isEqualTo(this.request.getContextPath() + "/");
}
@Test
public void onDeleteSessionCustomCookieName() throws Exception {
void onDeleteSessionCustomCookieName() throws Exception {
setCookieName("CUSTOM");
this.strategy.expireSession(this.request, this.response);
assertThat(getSessionId()).isEmpty();
}
@Test
public void createSessionCookieValue() {
assertThat(createSessionCookieValue(17)).isEqualToIgnoringCase(
"0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 a 10 b 11 c 12 d 13 e 14 f 15 10 16");
void createSessionCookieValue() {
assertThat(createSessionCookieValue(17))
.isEqualToIgnoringCase("0 0 1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9 a 10 b 11 c 12 d 13 e 14 f 15 10 16");
}
private String createSessionCookieValue(long size) {

View File

@@ -42,7 +42,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalStateException;
* @author Vedran Pavic
* @author Eddú Meléndez
*/
public class DefaultCookieSerializerTests {
class DefaultCookieSerializerTests {
private String cookieName;
@@ -55,7 +55,7 @@ public class DefaultCookieSerializerTests {
private String sessionId;
@BeforeEach
public void setup() {
void setup() {
this.cookieName = "SESSION";
this.request = new MockHttpServletRequest();
this.response = new MockHttpServletResponse();
@@ -66,23 +66,21 @@ public class DefaultCookieSerializerTests {
// --- readCookieValues ---
@Test
public void readCookieValuesNull() {
void readCookieValuesNull() {
assertThat(this.serializer.readCookieValues(this.request)).isEmpty();
}
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void readCookieValuesSingle(boolean useBase64Encoding) {
void readCookieValuesSingle(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
this.request.setCookies(
createCookie(this.cookieName, this.sessionId, useBase64Encoding));
this.request.setCookies(createCookie(this.cookieName, this.sessionId, useBase64Encoding));
assertThat(this.serializer.readCookieValues(this.request))
.containsOnly(this.sessionId);
assertThat(this.serializer.readCookieValues(this.request)).containsOnly(this.sessionId);
}
@Test
public void readCookieSerializerUseBase64EncodingTrueValuesNotBase64() {
void readCookieSerializerUseBase64EncodingTrueValuesNotBase64() {
this.sessionId = "&^%$*";
this.serializer.setUseBase64Encoding(true);
this.request.setCookies(new Cookie(this.cookieName, this.sessionId));
@@ -92,48 +90,41 @@ public class DefaultCookieSerializerTests {
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void readCookieValuesSingleAndInvalidName(boolean useBase64Encoding) {
void readCookieValuesSingleAndInvalidName(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
this.request.setCookies(
createCookie(this.cookieName, this.sessionId, useBase64Encoding),
createCookie(this.cookieName + "INVALID", this.sessionId + "INVALID",
useBase64Encoding));
this.request.setCookies(createCookie(this.cookieName, this.sessionId, useBase64Encoding),
createCookie(this.cookieName + "INVALID", this.sessionId + "INVALID", useBase64Encoding));
assertThat(this.serializer.readCookieValues(this.request))
.containsOnly(this.sessionId);
assertThat(this.serializer.readCookieValues(this.request)).containsOnly(this.sessionId);
}
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void readCookieValuesMulti(boolean useBase64Encoding) {
void readCookieValuesMulti(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
String secondSession = "secondSessionId";
this.request.setCookies(
createCookie(this.cookieName, this.sessionId, useBase64Encoding),
this.request.setCookies(createCookie(this.cookieName, this.sessionId, useBase64Encoding),
createCookie(this.cookieName, secondSession, useBase64Encoding));
assertThat(this.serializer.readCookieValues(this.request))
.containsExactly(this.sessionId, secondSession);
assertThat(this.serializer.readCookieValues(this.request)).containsExactly(this.sessionId, secondSession);
}
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void readCookieValuesMultiCustomSessionCookieName(boolean useBase64Encoding) {
void readCookieValuesMultiCustomSessionCookieName(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
setCookieName("JSESSIONID");
String secondSession = "secondSessionId";
this.request.setCookies(
createCookie(this.cookieName, this.sessionId, useBase64Encoding),
this.request.setCookies(createCookie(this.cookieName, this.sessionId, useBase64Encoding),
createCookie(this.cookieName, secondSession, useBase64Encoding));
assertThat(this.serializer.readCookieValues(this.request))
.containsExactly(this.sessionId, secondSession);
assertThat(this.serializer.readCookieValues(this.request)).containsExactly(this.sessionId, secondSession);
}
// gh-392
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void readCookieValuesNullCookieValue(boolean useBase64Encoding) {
void readCookieValuesNullCookieValue(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
this.request.setCookies(createCookie(this.cookieName, null, useBase64Encoding));
@@ -142,7 +133,7 @@ public class DefaultCookieSerializerTests {
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void readCookieValuesNullCookieValueAndJvmRoute(boolean useBase64Encoding) {
void readCookieValuesNullCookieValueAndJvmRoute(boolean useBase64Encoding) {
this.serializer.setJvmRoute("123");
this.request.setCookies(createCookie(this.cookieName, null, useBase64Encoding));
@@ -151,21 +142,20 @@ public class DefaultCookieSerializerTests {
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void readCookieValuesNullCookieValueAndNotNullCookie(boolean useBase64Encoding) {
void readCookieValuesNullCookieValueAndNotNullCookie(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
this.serializer.setJvmRoute("123");
this.request.setCookies(createCookie(this.cookieName, null, useBase64Encoding),
createCookie(this.cookieName, this.sessionId, useBase64Encoding));
assertThat(this.serializer.readCookieValues(this.request))
.containsOnly(this.sessionId);
assertThat(this.serializer.readCookieValues(this.request)).containsOnly(this.sessionId);
}
// --- writeCookie ---
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void writeCookie(boolean useBase64Encoding) {
void writeCookie(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -175,14 +165,14 @@ public class DefaultCookieSerializerTests {
// --- httpOnly ---
@Test
public void writeCookieHttpOnlyDefault() {
void writeCookieHttpOnlyDefault() {
this.serializer.writeCookieValue(cookieValue(this.sessionId));
assertThat(getCookie().isHttpOnly()).isTrue();
}
@Test
public void writeCookieHttpOnlySetTrue() {
void writeCookieHttpOnlySetTrue() {
this.serializer.setUseHttpOnlyCookie(true);
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -191,7 +181,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieHttpOnlySetFalse() {
void writeCookieHttpOnlySetFalse() {
this.serializer.setUseHttpOnlyCookie(false);
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -202,14 +192,14 @@ public class DefaultCookieSerializerTests {
// --- domainName ---
@Test
public void writeCookieDomainNameDefault() {
void writeCookieDomainNameDefault() {
this.serializer.writeCookieValue(cookieValue(this.sessionId));
assertThat(getCookie().getDomain()).isNull();
}
@Test
public void writeCookieDomainNameCustom() {
void writeCookieDomainNameCustom() {
String domainName = "example.com";
this.serializer.setDomainName(domainName);
@@ -219,17 +209,16 @@ public class DefaultCookieSerializerTests {
}
@Test
public void setDomainNameAndDomainNamePatternThrows() {
void setDomainNameAndDomainNamePatternThrows() {
this.serializer.setDomainName("example.com");
assertThatIllegalStateException()
.isThrownBy(() -> this.serializer.setDomainNamePattern(".*"))
assertThatIllegalStateException().isThrownBy(() -> this.serializer.setDomainNamePattern(".*"))
.withMessage("Cannot set both domainName and domainNamePattern");
}
// --- domainNamePattern ---
@Test
public void writeCookieDomainNamePattern() {
void writeCookieDomainNamePattern() {
String domainNamePattern = "^.+?\\.(\\w+\\.[a-z]+)$";
this.serializer.setDomainNamePattern(domainNamePattern);
@@ -253,24 +242,23 @@ public class DefaultCookieSerializerTests {
}
@Test
public void setDomainNamePatternAndDomainNameThrows() {
void setDomainNamePatternAndDomainNameThrows() {
this.serializer.setDomainNamePattern(".*");
assertThatIllegalStateException()
.isThrownBy(() -> this.serializer.setDomainName("example.com"))
assertThatIllegalStateException().isThrownBy(() -> this.serializer.setDomainName("example.com"))
.withMessage("Cannot set both domainName and domainNamePattern");
}
// --- cookieName ---
@Test
public void writeCookieCookieNameDefault() {
void writeCookieCookieNameDefault() {
this.serializer.writeCookieValue(cookieValue(this.sessionId));
assertThat(getCookie().getName()).isEqualTo("SESSION");
}
@Test
public void writeCookieCookieNameCustom() {
void writeCookieCookieNameCustom() {
String cookieName = "JSESSIONID";
setCookieName(cookieName);
@@ -280,16 +268,15 @@ public class DefaultCookieSerializerTests {
}
@Test
public void setCookieNameNullThrows() {
assertThatIllegalArgumentException()
.isThrownBy(() -> this.serializer.setCookieName(null))
void setCookieNameNullThrows() {
assertThatIllegalArgumentException().isThrownBy(() -> this.serializer.setCookieName(null))
.withMessage("cookieName cannot be null");
}
// --- cookiePath ---
@Test
public void writeCookieCookiePathDefaultEmptyContextPathUsed() {
void writeCookieCookiePathDefaultEmptyContextPathUsed() {
this.request.setContextPath("");
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -298,7 +285,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieCookiePathDefaultContextPathUsed() {
void writeCookieCookiePathDefaultContextPathUsed() {
this.request.setContextPath("/context");
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -307,7 +294,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieCookiePathExplicitNullCookiePathContextPathUsed() {
void writeCookieCookiePathExplicitNullCookiePathContextPathUsed() {
this.request.setContextPath("/context");
this.serializer.setCookiePath(null);
@@ -317,7 +304,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieCookiePathExplicitCookiePath() {
void writeCookieCookiePathExplicitCookiePath() {
this.request.setContextPath("/context");
this.serializer.setCookiePath("/");
@@ -329,14 +316,14 @@ public class DefaultCookieSerializerTests {
// --- cookieMaxAge ---
@Test
public void writeCookieCookieMaxAgeDefault() {
void writeCookieCookieMaxAgeDefault() {
this.serializer.writeCookieValue(cookieValue(this.sessionId));
assertThat(getCookie().getMaxAge()).isEqualTo(-1);
}
@Test
public void writeCookieCookieMaxAgeExplicit() {
void writeCookieCookieMaxAgeExplicit() {
this.serializer.setCookieMaxAge(100);
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -345,7 +332,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieCookieMaxAgeExplicitEmptyCookie() {
void writeCookieCookieMaxAgeExplicitEmptyCookie() {
this.serializer.setCookieMaxAge(100);
this.serializer.writeCookieValue(cookieValue(""));
@@ -354,7 +341,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieCookieMaxAgeExplicitCookieValue() {
void writeCookieCookieMaxAgeExplicitCookieValue() {
CookieValue cookieValue = cookieValue(this.sessionId);
cookieValue.setCookieMaxAge(100);
@@ -366,14 +353,14 @@ public class DefaultCookieSerializerTests {
// --- secure ---
@Test
public void writeCookieDefaultInsecureRequest() {
void writeCookieDefaultInsecureRequest() {
this.serializer.writeCookieValue(cookieValue(this.sessionId));
assertThat(getCookie().getSecure()).isFalse();
}
@Test
public void writeCookieSecureSecureRequest() {
void writeCookieSecureSecureRequest() {
this.request.setSecure(true);
this.serializer.setUseSecureCookie(true);
@@ -383,7 +370,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieSecureInsecureRequest() {
void writeCookieSecureInsecureRequest() {
this.serializer.setUseSecureCookie(true);
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -392,7 +379,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieInsecureSecureRequest() {
void writeCookieInsecureSecureRequest() {
this.request.setSecure(true);
this.serializer.setUseSecureCookie(false);
@@ -402,7 +389,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieInecureInsecureRequest() {
void writeCookieInecureInsecureRequest() {
this.serializer.setUseSecureCookie(false);
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -414,51 +401,45 @@ public class DefaultCookieSerializerTests {
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void writeCookieJvmRoute(boolean useBase64Encoding) {
void writeCookieJvmRoute(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
String jvmRoute = "route";
this.serializer.setJvmRoute(jvmRoute);
this.serializer.writeCookieValue(cookieValue(this.sessionId));
assertThat(getCookieValue(useBase64Encoding))
.isEqualTo(this.sessionId + "." + jvmRoute);
assertThat(getCookieValue(useBase64Encoding)).isEqualTo(this.sessionId + "." + jvmRoute);
}
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void readCookieJvmRoute(boolean useBase64Encoding) {
void readCookieJvmRoute(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
String jvmRoute = "route";
this.serializer.setJvmRoute(jvmRoute);
this.request.setCookies(createCookie(this.cookieName,
this.sessionId + "." + jvmRoute, useBase64Encoding));
this.request.setCookies(createCookie(this.cookieName, this.sessionId + "." + jvmRoute, useBase64Encoding));
assertThat(this.serializer.readCookieValues(this.request))
.containsOnly(this.sessionId);
assertThat(this.serializer.readCookieValues(this.request)).containsOnly(this.sessionId);
}
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void readCookieJvmRouteRouteMissing(boolean useBase64Encoding) {
void readCookieJvmRouteRouteMissing(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
String jvmRoute = "route";
this.serializer.setJvmRoute(jvmRoute);
this.request.setCookies(
createCookie(this.cookieName, this.sessionId, useBase64Encoding));
this.request.setCookies(createCookie(this.cookieName, this.sessionId, useBase64Encoding));
assertThat(this.serializer.readCookieValues(this.request))
.containsOnly(this.sessionId);
assertThat(this.serializer.readCookieValues(this.request)).containsOnly(this.sessionId);
}
@ParameterizedTest
@ValueSource(strings = { "true", "false" })
public void readCookieJvmRouteOnlyRoute(boolean useBase64Encoding) {
void readCookieJvmRouteOnlyRoute(boolean useBase64Encoding) {
this.serializer.setUseBase64Encoding(useBase64Encoding);
String jvmRoute = "route";
this.serializer.setJvmRoute(jvmRoute);
this.request.setCookies(
createCookie(this.cookieName, "." + jvmRoute, useBase64Encoding));
this.request.setCookies(createCookie(this.cookieName, "." + jvmRoute, useBase64Encoding));
assertThat(this.serializer.readCookieValues(this.request)).containsOnly("");
}
@@ -466,7 +447,7 @@ public class DefaultCookieSerializerTests {
// --- rememberMe ---
@Test
public void writeCookieRememberMeCookieMaxAgeDefault() {
void writeCookieRememberMeCookieMaxAgeDefault() {
this.request.setAttribute("rememberMe", true);
this.serializer.setRememberMeRequestAttribute("rememberMe");
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -475,7 +456,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieRememberMeCookieMaxAgeOverride() {
void writeCookieRememberMeCookieMaxAgeOverride() {
this.request.setAttribute("rememberMe", true);
this.serializer.setRememberMeRequestAttribute("rememberMe");
CookieValue cookieValue = cookieValue(this.sessionId);
@@ -488,14 +469,14 @@ public class DefaultCookieSerializerTests {
// --- sameSite ---
@Test
public void writeCookieDefaultSameSiteLax() {
void writeCookieDefaultSameSiteLax() {
this.serializer.writeCookieValue(cookieValue(this.sessionId));
assertThat(getCookie().getSameSite()).isEqualTo("Lax");
}
@Test
public void writeCookieSetSameSiteLax() {
void writeCookieSetSameSiteLax() {
this.serializer.setSameSite("Lax");
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -503,7 +484,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieSetSameSiteStrict() {
void writeCookieSetSameSiteStrict() {
this.serializer.setSameSite("Strict");
this.serializer.writeCookieValue(cookieValue(this.sessionId));
@@ -511,7 +492,7 @@ public class DefaultCookieSerializerTests {
}
@Test
public void writeCookieSetSameSiteNull() {
void writeCookieSetSameSiteNull() {
this.serializer.setSameSite(null);
this.serializer.writeCookieValue(cookieValue(this.sessionId));

View File

@@ -32,7 +32,7 @@ import static org.assertj.core.api.Assertions.assertThatIllegalArgumentException
/**
* Tests for {@link HeaderHttpSessionIdResolver}.
*/
public class HeaderHttpSessionIdResolverTests {
class HeaderHttpSessionIdResolverTests {
private static final String HEADER_X_AUTH_TOKEN = "X-Auth-Token";
@@ -43,71 +43,64 @@ public class HeaderHttpSessionIdResolverTests {
private HeaderHttpSessionIdResolver resolver;
@BeforeEach
public void setup() {
void setup() {
this.request = new MockHttpServletRequest();
this.response = new MockHttpServletResponse();
this.resolver = HeaderHttpSessionIdResolver.xAuthToken();
}
@Test
public void createResolverWithXAuthTokenHeader() {
void createResolverWithXAuthTokenHeader() {
HeaderHttpSessionIdResolver resolver = HeaderHttpSessionIdResolver.xAuthToken();
assertThat(ReflectionTestUtils.getField(resolver, "headerName"))
.isEqualTo("X-Auth-Token");
assertThat(ReflectionTestUtils.getField(resolver, "headerName")).isEqualTo("X-Auth-Token");
}
@Test
public void createResolverWithAuthenticationInfoHeader() {
HeaderHttpSessionIdResolver resolver = HeaderHttpSessionIdResolver
.authenticationInfo();
assertThat(ReflectionTestUtils.getField(resolver, "headerName"))
.isEqualTo("Authentication-Info");
void createResolverWithAuthenticationInfoHeader() {
HeaderHttpSessionIdResolver resolver = HeaderHttpSessionIdResolver.authenticationInfo();
assertThat(ReflectionTestUtils.getField(resolver, "headerName")).isEqualTo("Authentication-Info");
}
@Test
public void createResolverWithCustomHeaderName() {
HeaderHttpSessionIdResolver resolver = new HeaderHttpSessionIdResolver(
"Custom-Header");
assertThat(ReflectionTestUtils.getField(resolver, "headerName"))
.isEqualTo("Custom-Header");
void createResolverWithCustomHeaderName() {
HeaderHttpSessionIdResolver resolver = new HeaderHttpSessionIdResolver("Custom-Header");
assertThat(ReflectionTestUtils.getField(resolver, "headerName")).isEqualTo("Custom-Header");
}
@Test
public void createResolverWithNullHeaderName() {
assertThatIllegalArgumentException()
.isThrownBy(() -> new HeaderHttpSessionIdResolver(null))
void createResolverWithNullHeaderName() {
assertThatIllegalArgumentException().isThrownBy(() -> new HeaderHttpSessionIdResolver(null))
.withMessage("headerName cannot be null");
}
@Test
public void getRequestedSessionIdNull() {
void getRequestedSessionIdNull() {
assertThat(this.resolver.resolveSessionIds(this.request)).isEmpty();
}
@Test
public void getRequestedSessionIdNotNull() {
void getRequestedSessionIdNotNull() {
String sessionId = UUID.randomUUID().toString();
setSessionId(sessionId);
assertThat(this.resolver.resolveSessionIds(this.request))
.isEqualTo(Collections.singletonList(sessionId));
assertThat(this.resolver.resolveSessionIds(this.request)).isEqualTo(Collections.singletonList(sessionId));
}
@Test
public void onNewSession() {
void onNewSession() {
String sessionId = UUID.randomUUID().toString();
this.resolver.setSessionId(this.request, this.response, sessionId);
assertThat(getSessionId()).isEqualTo(sessionId);
}
@Test
public void onDeleteSession() {
void onDeleteSession() {
this.resolver.expireSession(this.request, this.response);
assertThat(getSessionId()).isEmpty();
}
// the header is set as apposed to added
@Test
public void onNewSessionMulti() {
void onNewSessionMulti() {
String sessionId = UUID.randomUUID().toString();
this.resolver.setSessionId(this.request, this.response, sessionId);
this.resolver.setSessionId(this.request, this.response, sessionId);
@@ -117,7 +110,7 @@ public class HeaderHttpSessionIdResolverTests {
// the header is set as apposed to added
@Test
public void onDeleteSessionMulti() {
void onDeleteSessionMulti() {
this.resolver.expireSession(this.request, this.response);
this.resolver.expireSession(this.request, this.response);
assertThat(this.response.getHeaders(HEADER_X_AUTH_TOKEN).size()).isEqualTo(1);

View File

@@ -32,22 +32,25 @@ import static org.assertj.core.api.Assertions.assertThat;
import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.verify;
public class OnCommittedResponseWrapperTests {
class OnCommittedResponseWrapperTests {
private static final String NL = "\r\n";
@Mock
HttpServletResponse delegate;
@Mock
PrintWriter writer;
@Mock
ServletOutputStream out;
OnCommittedResponseWrapper response;
private OnCommittedResponseWrapper response;
boolean committed;
private boolean committed;
@BeforeEach
public void setup() throws Exception {
void setup() throws Exception {
MockitoAnnotations.initMocks(this);
this.response = new OnCommittedResponseWrapper(this.delegate) {
@Override
@@ -62,14 +65,14 @@ public class OnCommittedResponseWrapperTests {
// --- printwriter
@Test
public void printWriterHashCode() throws Exception {
void printWriterHashCode() throws Exception {
int expected = this.writer.hashCode();
assertThat(this.response.getWriter().hashCode()).isEqualTo(expected);
}
@Test
public void printWriterCheckError() throws Exception {
void printWriterCheckError() throws Exception {
boolean expected = true;
given(this.writer.checkError()).willReturn(expected);
@@ -77,7 +80,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterWriteInt() throws Exception {
void printWriterWriteInt() throws Exception {
int expected = 1;
this.response.getWriter().write(expected);
@@ -86,7 +89,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterWriteCharIntInt() throws Exception {
void printWriterWriteCharIntInt() throws Exception {
char[] buff = new char[0];
int off = 2;
int len = 3;
@@ -97,7 +100,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterWriteChar() throws Exception {
void printWriterWriteChar() throws Exception {
char[] buff = new char[0];
this.response.getWriter().write(buff);
@@ -106,7 +109,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterWriteStringIntInt() throws Exception {
void printWriterWriteStringIntInt() throws Exception {
String s = "";
int off = 2;
int len = 3;
@@ -117,7 +120,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterWriteString() throws Exception {
void printWriterWriteString() throws Exception {
String s = "";
this.response.getWriter().write(s);
@@ -126,7 +129,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintBoolean() throws Exception {
void printWriterPrintBoolean() throws Exception {
boolean b = true;
this.response.getWriter().print(b);
@@ -135,7 +138,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintChar() throws Exception {
void printWriterPrintChar() throws Exception {
char c = 1;
this.response.getWriter().print(c);
@@ -144,7 +147,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintInt() throws Exception {
void printWriterPrintInt() throws Exception {
int i = 1;
this.response.getWriter().print(i);
@@ -153,7 +156,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintLong() throws Exception {
void printWriterPrintLong() throws Exception {
long l = 1;
this.response.getWriter().print(l);
@@ -162,7 +165,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintFloat() throws Exception {
void printWriterPrintFloat() throws Exception {
float f = 1;
this.response.getWriter().print(f);
@@ -171,7 +174,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintDouble() throws Exception {
void printWriterPrintDouble() throws Exception {
double x = 1;
this.response.getWriter().print(x);
@@ -180,7 +183,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintCharArray() throws Exception {
void printWriterPrintCharArray() throws Exception {
char[] x = new char[0];
this.response.getWriter().print(x);
@@ -189,7 +192,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintString() throws Exception {
void printWriterPrintString() throws Exception {
String x = "1";
this.response.getWriter().print(x);
@@ -198,7 +201,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintObject() throws Exception {
void printWriterPrintObject() throws Exception {
Object x = "1";
this.response.getWriter().print(x);
@@ -207,14 +210,14 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintln() throws Exception {
void printWriterPrintln() throws Exception {
this.response.getWriter().println();
verify(this.writer).println();
}
@Test
public void printWriterPrintlnBoolean() throws Exception {
void printWriterPrintlnBoolean() throws Exception {
boolean b = true;
this.response.getWriter().println(b);
@@ -223,7 +226,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintlnChar() throws Exception {
void printWriterPrintlnChar() throws Exception {
char c = 1;
this.response.getWriter().println(c);
@@ -232,7 +235,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintlnInt() throws Exception {
void printWriterPrintlnInt() throws Exception {
int i = 1;
this.response.getWriter().println(i);
@@ -241,7 +244,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintlnLong() throws Exception {
void printWriterPrintlnLong() throws Exception {
long l = 1;
this.response.getWriter().println(l);
@@ -250,7 +253,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintlnFloat() throws Exception {
void printWriterPrintlnFloat() throws Exception {
float f = 1;
this.response.getWriter().println(f);
@@ -259,7 +262,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintlnDouble() throws Exception {
void printWriterPrintlnDouble() throws Exception {
double x = 1;
this.response.getWriter().println(x);
@@ -268,7 +271,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintlnCharArray() throws Exception {
void printWriterPrintlnCharArray() throws Exception {
char[] x = new char[0];
this.response.getWriter().println(x);
@@ -277,7 +280,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintlnString() throws Exception {
void printWriterPrintlnString() throws Exception {
String x = "1";
this.response.getWriter().println(x);
@@ -286,7 +289,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintlnObject() throws Exception {
void printWriterPrintlnObject() throws Exception {
Object x = "1";
this.response.getWriter().println(x);
@@ -295,7 +298,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintfStringObjectVargs() throws Exception {
void printWriterPrintfStringObjectVargs() throws Exception {
String format = "format";
Object[] args = new Object[] { "1" };
@@ -305,7 +308,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterPrintfLocaleStringObjectVargs() throws Exception {
void printWriterPrintfLocaleStringObjectVargs() throws Exception {
Locale l = Locale.US;
String format = "format";
Object[] args = new Object[] { "1" };
@@ -316,7 +319,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterFormatStringObjectVargs() throws Exception {
void printWriterFormatStringObjectVargs() throws Exception {
String format = "format";
Object[] args = new Object[] { "1" };
@@ -326,7 +329,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterFormatLocaleStringObjectVargs() throws Exception {
void printWriterFormatLocaleStringObjectVargs() throws Exception {
Locale l = Locale.US;
String format = "format";
Object[] args = new Object[] { "1" };
@@ -337,7 +340,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterAppendCharSequence() throws Exception {
void printWriterAppendCharSequence() throws Exception {
String x = "a";
this.response.getWriter().append(x);
@@ -346,7 +349,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterAppendCharSequenceIntInt() throws Exception {
void printWriterAppendCharSequenceIntInt() throws Exception {
String x = "abcdef";
int start = 1;
int end = 3;
@@ -357,7 +360,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterAppendChar() throws Exception {
void printWriterAppendChar() throws Exception {
char x = 1;
this.response.getWriter().append(x);
@@ -368,14 +371,14 @@ public class OnCommittedResponseWrapperTests {
// servletoutputstream
@Test
public void outputStreamHashCode() throws Exception {
void outputStreamHashCode() throws Exception {
int expected = this.out.hashCode();
assertThat(this.response.getOutputStream().hashCode()).isEqualTo(expected);
}
@Test
public void outputStreamWriteInt() throws Exception {
void outputStreamWriteInt() throws Exception {
int expected = 1;
this.response.getOutputStream().write(expected);
@@ -384,7 +387,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamWriteByte() throws Exception {
void outputStreamWriteByte() throws Exception {
byte[] expected = new byte[0];
this.response.getOutputStream().write(expected);
@@ -393,7 +396,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamWriteByteIntInt() throws Exception {
void outputStreamWriteByteIntInt() throws Exception {
int start = 1;
int end = 2;
byte[] expected = new byte[0];
@@ -404,7 +407,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintBoolean() throws Exception {
void outputStreamPrintBoolean() throws Exception {
boolean b = true;
this.response.getOutputStream().print(b);
@@ -413,7 +416,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintChar() throws Exception {
void outputStreamPrintChar() throws Exception {
char c = 1;
this.response.getOutputStream().print(c);
@@ -422,7 +425,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintInt() throws Exception {
void outputStreamPrintInt() throws Exception {
int i = 1;
this.response.getOutputStream().print(i);
@@ -431,7 +434,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintLong() throws Exception {
void outputStreamPrintLong() throws Exception {
long l = 1;
this.response.getOutputStream().print(l);
@@ -440,7 +443,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintFloat() throws Exception {
void outputStreamPrintFloat() throws Exception {
float f = 1;
this.response.getOutputStream().print(f);
@@ -449,7 +452,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintDouble() throws Exception {
void outputStreamPrintDouble() throws Exception {
double x = 1;
this.response.getOutputStream().print(x);
@@ -458,7 +461,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintString() throws Exception {
void outputStreamPrintString() throws Exception {
String x = "1";
this.response.getOutputStream().print(x);
@@ -467,14 +470,14 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintln() throws Exception {
void outputStreamPrintln() throws Exception {
this.response.getOutputStream().println();
verify(this.out).println();
}
@Test
public void outputStreamPrintlnBoolean() throws Exception {
void outputStreamPrintlnBoolean() throws Exception {
boolean b = true;
this.response.getOutputStream().println(b);
@@ -483,7 +486,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintlnChar() throws Exception {
void outputStreamPrintlnChar() throws Exception {
char c = 1;
this.response.getOutputStream().println(c);
@@ -492,7 +495,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintlnInt() throws Exception {
void outputStreamPrintlnInt() throws Exception {
int i = 1;
this.response.getOutputStream().println(i);
@@ -501,7 +504,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintlnLong() throws Exception {
void outputStreamPrintlnLong() throws Exception {
long l = 1;
this.response.getOutputStream().println(l);
@@ -510,7 +513,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintlnFloat() throws Exception {
void outputStreamPrintlnFloat() throws Exception {
float f = 1;
this.response.getOutputStream().println(f);
@@ -519,7 +522,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintlnDouble() throws Exception {
void outputStreamPrintlnDouble() throws Exception {
double x = 1;
this.response.getOutputStream().println(x);
@@ -528,7 +531,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void outputStreamPrintlnString() throws Exception {
void outputStreamPrintlnString() throws Exception {
String x = "1";
this.response.getOutputStream().println(x);
@@ -540,7 +543,7 @@ public class OnCommittedResponseWrapperTests {
// has been greater than zero and has been written to the response.
@Test
public void contentLengthPrintWriterWriteIntCommits() throws Exception {
void contentLengthPrintWriterWriteIntCommits() throws Exception {
int expected = 1;
this.response.setContentLength(String.valueOf(expected).length());
@@ -550,7 +553,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterWriteIntMultiDigitCommits() throws Exception {
void contentLengthPrintWriterWriteIntMultiDigitCommits() throws Exception {
int expected = 10000;
this.response.setContentLength(String.valueOf(expected).length());
@@ -560,8 +563,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPlus1PrintWriterWriteIntMultiDigitCommits()
throws Exception {
void contentLengthPlus1PrintWriterWriteIntMultiDigitCommits() throws Exception {
int expected = 10000;
this.response.setContentLength(String.valueOf(expected).length() + 1);
@@ -575,7 +577,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterWriteCharIntIntCommits() throws Exception {
void contentLengthPrintWriterWriteCharIntIntCommits() throws Exception {
char[] buff = new char[0];
int off = 2;
int len = 3;
@@ -587,7 +589,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterWriteCharCommits() throws Exception {
void contentLengthPrintWriterWriteCharCommits() throws Exception {
char[] buff = new char[4];
this.response.setContentLength(buff.length);
@@ -597,7 +599,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterWriteStringIntIntCommits() throws Exception {
void contentLengthPrintWriterWriteStringIntIntCommits() throws Exception {
String s = "";
int off = 2;
int len = 3;
@@ -609,7 +611,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterWriteStringCommits() throws IOException {
void contentLengthPrintWriterWriteStringCommits() throws IOException {
String body = "something";
this.response.setContentLength(body.length());
@@ -619,7 +621,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterWriteStringContentLengthCommits() throws IOException {
void printWriterWriteStringContentLengthCommits() throws IOException {
String body = "something";
this.response.getWriter().write(body);
@@ -629,7 +631,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void printWriterWriteStringDoesNotCommit() throws IOException {
void printWriterWriteStringDoesNotCommit() throws IOException {
String body = "something";
this.response.getWriter().write(body);
@@ -638,7 +640,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintBooleanCommits() throws Exception {
void contentLengthPrintWriterPrintBooleanCommits() throws Exception {
boolean b = true;
this.response.setContentLength(1);
@@ -648,7 +650,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintCharCommits() throws Exception {
void contentLengthPrintWriterPrintCharCommits() throws Exception {
char c = 1;
this.response.setContentLength(1);
@@ -658,7 +660,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintIntCommits() throws Exception {
void contentLengthPrintWriterPrintIntCommits() throws Exception {
int i = 1234;
this.response.setContentLength(String.valueOf(i).length());
@@ -668,7 +670,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintLongCommits() throws Exception {
void contentLengthPrintWriterPrintLongCommits() throws Exception {
long l = 12345;
this.response.setContentLength(String.valueOf(l).length());
@@ -678,7 +680,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintFloatCommits() throws Exception {
void contentLengthPrintWriterPrintFloatCommits() throws Exception {
float f = 12345;
this.response.setContentLength(String.valueOf(f).length());
@@ -688,7 +690,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintDoubleCommits() throws Exception {
void contentLengthPrintWriterPrintDoubleCommits() throws Exception {
double x = 1.2345;
this.response.setContentLength(String.valueOf(x).length());
@@ -698,7 +700,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintCharArrayCommits() throws Exception {
void contentLengthPrintWriterPrintCharArrayCommits() throws Exception {
char[] x = new char[10];
this.response.setContentLength(x.length);
@@ -708,7 +710,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintStringCommits() throws Exception {
void contentLengthPrintWriterPrintStringCommits() throws Exception {
String x = "12345";
this.response.setContentLength(x.length());
@@ -718,7 +720,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintObjectCommits() throws Exception {
void contentLengthPrintWriterPrintObjectCommits() throws Exception {
Object x = "12345";
this.response.setContentLength(String.valueOf(x).length());
@@ -728,7 +730,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintlnCommits() throws Exception {
void contentLengthPrintWriterPrintlnCommits() throws Exception {
this.response.setContentLength(NL.length());
this.response.getWriter().println();
@@ -737,7 +739,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintlnBooleanCommits() throws Exception {
void contentLengthPrintWriterPrintlnBooleanCommits() throws Exception {
boolean b = true;
this.response.setContentLength(1);
@@ -747,7 +749,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintlnCharCommits() throws Exception {
void contentLengthPrintWriterPrintlnCharCommits() throws Exception {
char c = 1;
this.response.setContentLength(1);
@@ -757,7 +759,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintlnIntCommits() throws Exception {
void contentLengthPrintWriterPrintlnIntCommits() throws Exception {
int i = 12345;
this.response.setContentLength(String.valueOf(i).length());
@@ -767,7 +769,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintlnLongCommits() throws Exception {
void contentLengthPrintWriterPrintlnLongCommits() throws Exception {
long l = 12345678;
this.response.setContentLength(String.valueOf(l).length());
@@ -777,7 +779,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintlnFloatCommits() throws Exception {
void contentLengthPrintWriterPrintlnFloatCommits() throws Exception {
float f = 1234;
this.response.setContentLength(String.valueOf(f).length());
@@ -787,7 +789,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintlnDoubleCommits() throws Exception {
void contentLengthPrintWriterPrintlnDoubleCommits() throws Exception {
double x = 1;
this.response.setContentLength(String.valueOf(x).length());
@@ -797,7 +799,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintlnCharArrayCommits() throws Exception {
void contentLengthPrintWriterPrintlnCharArrayCommits() throws Exception {
char[] x = new char[20];
this.response.setContentLength(x.length);
@@ -807,7 +809,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintlnStringCommits() throws Exception {
void contentLengthPrintWriterPrintlnStringCommits() throws Exception {
String x = "1";
this.response.setContentLength(String.valueOf(x).length());
@@ -817,7 +819,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterPrintlnObjectCommits() throws Exception {
void contentLengthPrintWriterPrintlnObjectCommits() throws Exception {
Object x = "1";
this.response.setContentLength(String.valueOf(x).length());
@@ -827,7 +829,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterAppendCharSequenceCommits() throws Exception {
void contentLengthPrintWriterAppendCharSequenceCommits() throws Exception {
String x = "a";
this.response.setContentLength(String.valueOf(x).length());
@@ -837,8 +839,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterAppendCharSequenceIntIntCommits()
throws Exception {
void contentLengthPrintWriterAppendCharSequenceIntIntCommits() throws Exception {
String x = "abcdef";
int start = 1;
int end = 3;
@@ -850,7 +851,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPrintWriterAppendCharCommits() throws Exception {
void contentLengthPrintWriterAppendCharCommits() throws Exception {
char x = 1;
this.response.setContentLength(1);
@@ -860,7 +861,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamWriteIntCommits() throws Exception {
void contentLengthOutputStreamWriteIntCommits() throws Exception {
int expected = 1;
this.response.setContentLength(String.valueOf(expected).length());
@@ -870,7 +871,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamWriteIntMultiDigitCommits() throws Exception {
void contentLengthOutputStreamWriteIntMultiDigitCommits() throws Exception {
int expected = 10000;
this.response.setContentLength(String.valueOf(expected).length());
@@ -880,8 +881,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthPlus1OutputStreamWriteIntMultiDigitCommits()
throws Exception {
void contentLengthPlus1OutputStreamWriteIntMultiDigitCommits() throws Exception {
int expected = 10000;
this.response.setContentLength(String.valueOf(expected).length() + 1);
@@ -896,11 +896,10 @@ public class OnCommittedResponseWrapperTests {
// gh-171
@Test
public void contentLengthPlus1OutputStreamWriteByteArrayMultiDigitCommits()
throws Exception {
void contentLengthPlus1OutputStreamWriteByteArrayMultiDigitCommits() throws Exception {
String expected = "{\n" + " \"parameterName\" : \"_csrf\",\n"
+ " \"token\" : \"06300b65-c4aa-4c8f-8cda-39ee17f545a0\",\n"
+ " \"headerName\" : \"X-CSRF-TOKEN\"\n" + "}";
+ " \"token\" : \"06300b65-c4aa-4c8f-8cda-39ee17f545a0\",\n" + " \"headerName\" : \"X-CSRF-TOKEN\"\n"
+ "}";
this.response.setContentLength(expected.length() + 1);
this.response.getOutputStream().write(expected.getBytes());
@@ -913,7 +912,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintBooleanCommits() throws Exception {
void contentLengthOutputStreamPrintBooleanCommits() throws Exception {
boolean b = true;
this.response.setContentLength(1);
@@ -923,7 +922,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintCharCommits() throws Exception {
void contentLengthOutputStreamPrintCharCommits() throws Exception {
char c = 1;
this.response.setContentLength(1);
@@ -933,7 +932,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintIntCommits() throws Exception {
void contentLengthOutputStreamPrintIntCommits() throws Exception {
int i = 1234;
this.response.setContentLength(String.valueOf(i).length());
@@ -943,7 +942,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintLongCommits() throws Exception {
void contentLengthOutputStreamPrintLongCommits() throws Exception {
long l = 12345;
this.response.setContentLength(String.valueOf(l).length());
@@ -953,7 +952,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintFloatCommits() throws Exception {
void contentLengthOutputStreamPrintFloatCommits() throws Exception {
float f = 12345;
this.response.setContentLength(String.valueOf(f).length());
@@ -963,7 +962,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintDoubleCommits() throws Exception {
void contentLengthOutputStreamPrintDoubleCommits() throws Exception {
double x = 1.2345;
this.response.setContentLength(String.valueOf(x).length());
@@ -973,7 +972,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintStringCommits() throws Exception {
void contentLengthOutputStreamPrintStringCommits() throws Exception {
String x = "12345";
this.response.setContentLength(x.length());
@@ -983,7 +982,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintlnCommits() throws Exception {
void contentLengthOutputStreamPrintlnCommits() throws Exception {
this.response.setContentLength(NL.length());
this.response.getOutputStream().println();
@@ -992,7 +991,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintlnBooleanCommits() throws Exception {
void contentLengthOutputStreamPrintlnBooleanCommits() throws Exception {
boolean b = true;
this.response.setContentLength(1);
@@ -1002,7 +1001,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintlnCharCommits() throws Exception {
void contentLengthOutputStreamPrintlnCharCommits() throws Exception {
char c = 1;
this.response.setContentLength(1);
@@ -1012,7 +1011,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintlnIntCommits() throws Exception {
void contentLengthOutputStreamPrintlnIntCommits() throws Exception {
int i = 12345;
this.response.setContentLength(String.valueOf(i).length());
@@ -1022,7 +1021,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintlnLongCommits() throws Exception {
void contentLengthOutputStreamPrintlnLongCommits() throws Exception {
long l = 12345678;
this.response.setContentLength(String.valueOf(l).length());
@@ -1032,7 +1031,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintlnFloatCommits() throws Exception {
void contentLengthOutputStreamPrintlnFloatCommits() throws Exception {
float f = 1234;
this.response.setContentLength(String.valueOf(f).length());
@@ -1042,7 +1041,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintlnDoubleCommits() throws Exception {
void contentLengthOutputStreamPrintlnDoubleCommits() throws Exception {
double x = 1;
this.response.setContentLength(String.valueOf(x).length());
@@ -1052,7 +1051,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamPrintlnStringCommits() throws Exception {
void contentLengthOutputStreamPrintlnStringCommits() throws Exception {
String x = "1";
this.response.setContentLength(String.valueOf(x).length());
@@ -1062,7 +1061,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthDoesNotCommit() throws IOException {
void contentLengthDoesNotCommit() throws IOException {
String body = "something";
this.response.setContentLength(body.length());
@@ -1071,7 +1070,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void contentLengthOutputStreamWriteStringCommits() throws IOException {
void contentLengthOutputStreamWriteStringCommits() throws IOException {
String body = "something";
this.response.setContentLength(body.length());
@@ -1081,10 +1080,9 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void addHeaderContentLengthPrintWriterWriteStringCommits() throws Exception {
void addHeaderContentLengthPrintWriterWriteStringCommits() throws Exception {
int expected = 1234;
this.response.addHeader("Content-Length",
String.valueOf(String.valueOf(expected).length()));
this.response.addHeader("Content-Length", String.valueOf(String.valueOf(expected).length()));
this.response.getWriter().write(expected);
@@ -1092,7 +1090,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void bufferSizePrintWriterWriteCommits() throws Exception {
void bufferSizePrintWriterWriteCommits() throws Exception {
String expected = "1234567890";
given(this.response.getBufferSize()).willReturn(expected.length());
@@ -1102,7 +1100,7 @@ public class OnCommittedResponseWrapperTests {
}
@Test
public void bufferSizeCommitsOnce() throws Exception {
void bufferSizeCommitsOnce() throws Exception {
String expected = "1234567890";
given(this.response.getBufferSize()).willReturn(expected.length());
@@ -1116,4 +1114,5 @@ public class OnCommittedResponseWrapperTests {
assertThat(this.committed).isFalse();
}
}

View File

@@ -35,18 +35,23 @@ import org.springframework.mock.web.MockHttpServletResponse;
import static org.assertj.core.api.Assertions.assertThat;
public class OncePerRequestFilterTests {
class OncePerRequestFilterTests {
private MockHttpServletRequest request;
private MockHttpServletResponse response;
private MockFilterChain chain;
private OncePerRequestFilter filter;
private HttpServlet servlet;
private List<OncePerRequestFilter> invocations;
@BeforeEach
@SuppressWarnings("serial")
public void setup() {
void setup() {
this.servlet = new HttpServlet() {
};
this.request = new MockHttpServletRequest();
@@ -55,9 +60,8 @@ public class OncePerRequestFilterTests {
this.invocations = new ArrayList<>();
this.filter = new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
OncePerRequestFilterTests.this.invocations.add(this);
filterChain.doFilter(request, response);
}
@@ -65,34 +69,32 @@ public class OncePerRequestFilterTests {
}
@Test
public void doFilterOnce() throws ServletException, IOException {
void doFilterOnce() throws ServletException, IOException {
this.filter.doFilter(this.request, this.response, this.chain);
assertThat(this.invocations).containsOnly(this.filter);
}
@Test
public void doFilterMultiOnlyIvokesOnce() throws ServletException, IOException {
this.filter.doFilter(this.request, this.response,
new MockFilterChain(this.servlet, this.filter));
void doFilterMultiOnlyIvokesOnce() throws ServletException, IOException {
this.filter.doFilter(this.request, this.response, new MockFilterChain(this.servlet, this.filter));
assertThat(this.invocations).containsOnly(this.filter);
}
@Test
public void doFilterOtherSubclassInvoked() throws ServletException, IOException {
void doFilterOtherSubclassInvoked() throws ServletException, IOException {
OncePerRequestFilter filter2 = new OncePerRequestFilter() {
@Override
protected void doFilterInternal(HttpServletRequest request,
HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response,
FilterChain filterChain) throws ServletException, IOException {
OncePerRequestFilterTests.this.invocations.add(this);
filterChain.doFilter(request, response);
}
};
this.filter.doFilter(this.request, this.response,
new MockFilterChain(this.servlet, filter2));
this.filter.doFilter(this.request, this.response, new MockFilterChain(this.servlet, filter2));
assertThat(this.invocations).containsOnly(this.filter, filter2);
}
}

View File

@@ -47,7 +47,7 @@ import static org.mockito.Mockito.verifyZeroInteractions;
* @author Rob Winch
* @since 1.1
*/
public class SessionEventHttpSessionListenerAdapterTests {
class SessionEventHttpSessionListenerAdapterTests {
@Mock
private HttpSessionListener listener1;
@@ -68,10 +68,9 @@ public class SessionEventHttpSessionListenerAdapterTests {
private SessionEventHttpSessionListenerAdapter listener;
@BeforeEach
public void setup() {
void setup() {
MockitoAnnotations.initMocks(this);
this.listener = new SessionEventHttpSessionListenerAdapter(
Arrays.asList(this.listener1, this.listener2));
this.listener = new SessionEventHttpSessionListenerAdapter(Arrays.asList(this.listener1, this.listener2));
this.listener.setServletContext(new MockServletContext());
Session session = new MapSession();
@@ -83,7 +82,7 @@ public class SessionEventHttpSessionListenerAdapterTests {
// make configuration easier (i.e. autowire all HttpSessionListeners and might get
// none)
@Test
public void constructorEmptyWorks() {
void constructorEmptyWorks() {
new SessionEventHttpSessionListenerAdapter(Collections.emptyList());
}
@@ -92,9 +91,8 @@ public class SessionEventHttpSessionListenerAdapterTests {
* listeners
*/
@Test
public void onApplicationEventEmptyListenersDoesNotUseEvent() {
this.listener = new SessionEventHttpSessionListenerAdapter(
Collections.emptyList());
void onApplicationEventEmptyListenersDoesNotUseEvent() {
this.listener = new SessionEventHttpSessionListenerAdapter(Collections.emptyList());
this.destroyed = mock(SessionDestroyedEvent.class);
this.listener.onApplicationEvent(this.destroyed);
@@ -103,25 +101,23 @@ public class SessionEventHttpSessionListenerAdapterTests {
}
@Test
public void onApplicationEventDestroyed() {
void onApplicationEventDestroyed() {
this.listener.onApplicationEvent(this.destroyed);
verify(this.listener1).sessionDestroyed(this.sessionEvent.capture());
verify(this.listener2).sessionDestroyed(this.sessionEvent.capture());
assertThat(this.sessionEvent.getValue().getSession().getId())
.isEqualTo(this.destroyed.getSessionId());
assertThat(this.sessionEvent.getValue().getSession().getId()).isEqualTo(this.destroyed.getSessionId());
}
@Test
public void onApplicationEventCreated() {
void onApplicationEventCreated() {
this.listener.onApplicationEvent(this.created);
verify(this.listener1).sessionCreated(this.sessionEvent.capture());
verify(this.listener2).sessionCreated(this.sessionEvent.capture());
assertThat(this.sessionEvent.getValue().getSession().getId())
.isEqualTo(this.created.getSessionId());
assertThat(this.sessionEvent.getValue().getSession().getId()).isEqualTo(this.created.getSessionId());
}
}

View File

@@ -43,7 +43,7 @@ import static org.mockito.Mockito.verify;
* @author Rob Winch
* @author Vedran Pavic
*/
public class SpringSessionWebSessionStoreTests<S extends Session> {
class SpringSessionWebSessionStoreTests<S extends Session> {
@Mock
private ReactiveSessionRepository<S> sessionRepository;
@@ -57,68 +57,62 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
private SpringSessionWebSessionStore<S> webSessionStore;
@BeforeEach
public void setup() {
void setup() {
MockitoAnnotations.initMocks(this);
this.webSessionStore = new SpringSessionWebSessionStore<>(this.sessionRepository);
given(this.sessionRepository.findById(any()))
.willReturn(Mono.just(this.findByIdSession));
given(this.sessionRepository.createSession())
.willReturn(Mono.just(this.createSession));
given(this.sessionRepository.findById(any())).willReturn(Mono.just(this.findByIdSession));
given(this.sessionRepository.createSession()).willReturn(Mono.just(this.createSession));
}
@Test
public void constructorWhenNullRepositoryThenThrowsIllegalArgumentException() {
assertThatIllegalArgumentException()
.isThrownBy(() -> new SpringSessionWebSessionStore<S>(null))
void constructorWhenNullRepositoryThenThrowsIllegalArgumentException() {
assertThatIllegalArgumentException().isThrownBy(() -> new SpringSessionWebSessionStore<S>(null))
.withMessage("reactiveSessionRepository cannot be null");
}
@Test
public void createSessionWhenNoAttributesThenNotStarted() {
void createSessionWhenNoAttributesThenNotStarted() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
assertThat(createdWebSession.isStarted()).isFalse();
}
@Test
public void createSessionWhenAddAttributeThenStarted() {
given(this.createSession.getAttributeNames())
.willReturn(Collections.singleton("a"));
void createSessionWhenAddAttributeThenStarted() {
given(this.createSession.getAttributeNames()).willReturn(Collections.singleton("a"));
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
assertThat(createdWebSession.isStarted()).isTrue();
}
@Test
public void createSessionWhenGetAttributesAndSizeThenDelegatesToCreateSession() {
void createSessionWhenGetAttributesAndSizeThenDelegatesToCreateSession() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
assertThat(attributes.size()).isEqualTo(0);
given(this.createSession.getAttributeNames())
.willReturn(Collections.singleton("a"));
given(this.createSession.getAttributeNames()).willReturn(Collections.singleton("a"));
assertThat(attributes.size()).isEqualTo(1);
}
@Test
public void createSessionWhenGetAttributesAndIsEmptyThenDelegatesToCreateSession() {
void createSessionWhenGetAttributesAndIsEmptyThenDelegatesToCreateSession() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
assertThat(attributes.isEmpty()).isTrue();
given(this.createSession.getAttributeNames())
.willReturn(Collections.singleton("a"));
given(this.createSession.getAttributeNames()).willReturn(Collections.singleton("a"));
assertThat(attributes.isEmpty()).isFalse();
}
@Test
public void createSessionWhenGetAttributesAndContainsKeyAndNotStringThenFalse() {
void createSessionWhenGetAttributesAndContainsKeyAndNotStringThenFalse() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
@@ -127,7 +121,7 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void createSessionWhenGetAttributesAndContainsKeyAndNotFoundThenFalse() {
void createSessionWhenGetAttributesAndContainsKeyAndNotFoundThenFalse() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
@@ -136,9 +130,8 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void createSessionWhenGetAttributesAndContainsKeyAndFoundThenTrue() {
given(this.createSession.getAttributeNames())
.willReturn(Collections.singleton("a"));
void createSessionWhenGetAttributesAndContainsKeyAndFoundThenTrue() {
given(this.createSession.getAttributeNames()).willReturn(Collections.singleton("a"));
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
@@ -147,7 +140,7 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void createSessionWhenGetAttributesAndPutThenDelegatesToCreateSession() {
void createSessionWhenGetAttributesAndPutThenDelegatesToCreateSession() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
@@ -157,7 +150,7 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void createSessionWhenGetAttributesAndPutNullThenDelegatesToCreateSession() {
void createSessionWhenGetAttributesAndPutNullThenDelegatesToCreateSession() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
@@ -167,7 +160,7 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void createSessionWhenGetAttributesAndRemoveThenDelegatesToCreateSession() {
void createSessionWhenGetAttributesAndRemoveThenDelegatesToCreateSession() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
@@ -177,7 +170,7 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void createSessionWhenGetAttributesAndPutAllThenDelegatesToCreateSession() {
void createSessionWhenGetAttributesAndPutAllThenDelegatesToCreateSession() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
@@ -187,9 +180,8 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void createSessionWhenGetAttributesAndClearThenDelegatesToCreateSession() {
given(this.createSession.getAttributeNames())
.willReturn(Collections.singleton("a"));
void createSessionWhenGetAttributesAndClearThenDelegatesToCreateSession() {
given(this.createSession.getAttributeNames()).willReturn(Collections.singleton("a"));
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
@@ -199,9 +191,8 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void createSessionWhenGetAttributesAndKeySetThenDelegatesToCreateSession() {
given(this.createSession.getAttributeNames())
.willReturn(Collections.singleton("a"));
void createSessionWhenGetAttributesAndKeySetThenDelegatesToCreateSession() {
given(this.createSession.getAttributeNames()).willReturn(Collections.singleton("a"));
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
Map<String, Object> attributes = createdWebSession.getAttributes();
@@ -210,9 +201,8 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void createSessionWhenGetAttributesAndValuesThenDelegatesToCreateSession() {
given(this.createSession.getAttributeNames())
.willReturn(Collections.singleton("a"));
void createSessionWhenGetAttributesAndValuesThenDelegatesToCreateSession() {
given(this.createSession.getAttributeNames()).willReturn(Collections.singleton("a"));
given(this.createSession.getAttribute("a")).willReturn("b");
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
@@ -222,10 +212,9 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void createSessionWhenGetAttributesAndEntrySetThenDelegatesToCreateSession() {
void createSessionWhenGetAttributesAndEntrySetThenDelegatesToCreateSession() {
String attrName = "attrName";
given(this.createSession.getAttributeNames())
.willReturn(Collections.singleton(attrName));
given(this.createSession.getAttributeNames()).willReturn(Collections.singleton(attrName));
String attrValue = "attrValue";
given(this.createSession.getAttribute(attrName)).willReturn(attrValue);
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
@@ -233,12 +222,11 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
Map<String, Object> attributes = createdWebSession.getAttributes();
Set<Map.Entry<String, Object>> entries = attributes.entrySet();
assertThat(entries)
.containsExactly(new AbstractMap.SimpleEntry<>(attrName, attrValue));
assertThat(entries).containsExactly(new AbstractMap.SimpleEntry<>(attrName, attrValue));
}
@Test
public void retrieveSessionThenStarted() {
void retrieveSessionThenStarted() {
String id = "id";
WebSession retrievedWebSession = this.webSessionStore.retrieveSession(id).block();
@@ -247,7 +235,7 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void removeSessionWhenInvokedThenSessionSaved() {
void removeSessionWhenInvokedThenSessionSaved() {
String sessionId = "session-id";
given(this.sessionRepository.deleteById(sessionId)).willReturn(Mono.empty());
@@ -257,21 +245,20 @@ public class SpringSessionWebSessionStoreTests<S extends Session> {
}
@Test
public void setClockWhenNullThenException() {
assertThatIllegalArgumentException()
.isThrownBy(() -> this.webSessionStore.setClock(null))
void setClockWhenNullThenException() {
assertThatIllegalArgumentException().isThrownBy(() -> this.webSessionStore.setClock(null))
.withMessage("clock cannot be null");
}
@Test // gh-1114
public void createSessionThenSessionIsNotExpired() {
void createSessionThenSessionIsNotExpired() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
assertThat(createdWebSession.isExpired()).isFalse();
}
@Test // gh-1114
public void invalidateSessionThenSessionIsExpired() {
void invalidateSessionThenSessionIsExpired() {
WebSession createdWebSession = this.webSessionStore.createWebSession().block();
given(createdWebSession.invalidate()).willReturn(Mono.empty());

View File

@@ -35,33 +35,36 @@ import static org.mockito.BDDMockito.willThrow;
import static org.mockito.Mockito.any;
import static org.mockito.Mockito.verify;
public class WebSocketConnectHandlerDecoratorFactoryTests {
class WebSocketConnectHandlerDecoratorFactoryTests {
@Mock
ApplicationEventPublisher eventPublisher;
@Mock
WebSocketHandler delegate;
@Mock
WebSocketSession session;
@Captor
ArgumentCaptor<SessionConnectEvent> event;
WebSocketConnectHandlerDecoratorFactory factory;
private WebSocketConnectHandlerDecoratorFactory factory;
@BeforeEach
public void setup() {
void setup() {
MockitoAnnotations.initMocks(this);
this.factory = new WebSocketConnectHandlerDecoratorFactory(this.eventPublisher);
}
@Test
public void constructorNullEventPublisher() {
assertThatIllegalArgumentException()
.isThrownBy(() -> new WebSocketConnectHandlerDecoratorFactory(null))
void constructorNullEventPublisher() {
assertThatIllegalArgumentException().isThrownBy(() -> new WebSocketConnectHandlerDecoratorFactory(null))
.withMessage("eventPublisher cannot be null");
}
@Test
public void decorateAfterConnectionEstablished() throws Exception {
void decorateAfterConnectionEstablished() throws Exception {
WebSocketHandler decorated = this.factory.decorate(this.delegate);
decorated.afterConnectionEstablished(this.session);
@@ -71,13 +74,14 @@ public class WebSocketConnectHandlerDecoratorFactoryTests {
}
@Test
public void decorateAfterConnectionEstablishedEventError() throws Exception {
void decorateAfterConnectionEstablishedEventError() throws Exception {
WebSocketHandler decorated = this.factory.decorate(this.delegate);
willThrow(new IllegalStateException("Test throw on publishEvent"))
.given(this.eventPublisher).publishEvent(any(ApplicationEvent.class));
willThrow(new IllegalStateException("Test throw on publishEvent")).given(this.eventPublisher)
.publishEvent(any(ApplicationEvent.class));
decorated.afterConnectionEstablished(this.session);
verify(this.eventPublisher).publishEvent(any(SessionConnectEvent.class));
}
}

View File

@@ -44,7 +44,7 @@ import static org.mockito.BDDMockito.given;
import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
public class WebSocketRegistryListenerTests {
class WebSocketRegistryListenerTests {
@Mock
private WebSocketSession wsSession;
@@ -73,7 +73,7 @@ public class WebSocketRegistryListenerTests {
private WebSocketRegistryListener listener;
@BeforeEach
public void setup() {
void setup() {
MockitoAnnotations.initMocks(this);
String sessionId = "session-id";
MapSession session = new MapSession(sessionId);
@@ -96,14 +96,14 @@ public class WebSocketRegistryListenerTests {
this.listener = new WebSocketRegistryListener();
this.connect = new SessionConnectEvent(this.listener, this.wsSession);
this.connect2 = new SessionConnectEvent(this.listener, this.wsSession2);
this.disconnect = new SessionDisconnectEvent(this.listener, this.message,
this.wsSession.getId(), CloseStatus.NORMAL);
this.disconnect = new SessionDisconnectEvent(this.listener, this.message, this.wsSession.getId(),
CloseStatus.NORMAL);
this.deleted = new SessionDeletedEvent(this.listener, session);
this.expired = new SessionExpiredEvent(this.listener, session);
}
@Test
public void onApplicationEventConnectSessionDeleted() throws Exception {
void onApplicationEventConnectSessionDeleted() throws Exception {
this.listener.onApplicationEvent(this.connect);
this.listener.onApplicationEvent(this.deleted);
@@ -112,7 +112,7 @@ public class WebSocketRegistryListenerTests {
}
@Test
public void onApplicationEventConnectSessionExpired() throws Exception {
void onApplicationEventConnectSessionExpired() throws Exception {
this.listener.onApplicationEvent(this.connect);
this.listener.onApplicationEvent(this.expired);
@@ -121,7 +121,7 @@ public class WebSocketRegistryListenerTests {
}
@Test
public void onApplicationEventConnectSessionDeletedNullPrincipal() throws Exception {
void onApplicationEventConnectSessionDeletedNullPrincipal() throws Exception {
given(this.wsSession.getPrincipal()).willReturn(null);
this.listener.onApplicationEvent(this.connect);
@@ -131,7 +131,7 @@ public class WebSocketRegistryListenerTests {
}
@Test
public void onApplicationEventConnectDisconnect() throws Exception {
void onApplicationEventConnectDisconnect() throws Exception {
this.listener.onApplicationEvent(this.connect);
this.listener.onApplicationEvent(this.disconnect);
@@ -143,7 +143,7 @@ public class WebSocketRegistryListenerTests {
// gh-76
@Test
@SuppressWarnings("unchecked")
public void onApplicationEventConnectDisconnectCleanup() {
void onApplicationEventConnectDisconnectCleanup() {
this.listener.onApplicationEvent(this.connect);
this.listener.onApplicationEvent(this.disconnect);
@@ -154,7 +154,7 @@ public class WebSocketRegistryListenerTests {
}
@Test
public void onApplicationEventConnectDisconnectNullSession() throws Exception {
void onApplicationEventConnectDisconnectNullSession() throws Exception {
this.listener.onApplicationEvent(this.connect);
this.attributes.clear();
@@ -164,7 +164,7 @@ public class WebSocketRegistryListenerTests {
}
@Test
public void onApplicationEventConnectConnectDisonnect() throws Exception {
void onApplicationEventConnectConnectDisonnect() throws Exception {
this.listener.onApplicationEvent(this.connect);
this.listener.onApplicationEvent(this.connect2);
this.listener.onApplicationEvent(this.disconnect);

View File

@@ -51,25 +51,27 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyZeroInteractions;
public class SessionRepositoryMessageInterceptorTests {
class SessionRepositoryMessageInterceptorTests {
@Mock
SessionRepository<Session> sessionRepository;
@Mock
MessageChannel channel;
@Mock
Session session;
Message<?> createMessage;
private Message<?> createMessage;
SimpMessageHeaderAccessor headers;
private SimpMessageHeaderAccessor headers;
SessionRepositoryMessageInterceptor<Session> interceptor;
private SessionRepositoryMessageInterceptor<Session> interceptor;
@BeforeEach
public void setup() {
void setup() {
MockitoAnnotations.initMocks(this);
this.interceptor = new SessionRepositoryMessageInterceptor<>(
this.sessionRepository);
this.interceptor = new SessionRepositoryMessageInterceptor<>(this.sessionRepository);
this.headers = SimpMessageHeaderAccessor.create();
this.headers.setSessionId("session");
this.headers.setSessionAttributes(new HashMap<>());
@@ -80,123 +82,112 @@ public class SessionRepositoryMessageInterceptorTests {
}
@Test
public void preSendconstructorNullRepository() {
assertThatIllegalArgumentException()
.isThrownBy(() -> new SessionRepositoryMessageInterceptor<>(null))
void preSendconstructorNullRepository() {
assertThatIllegalArgumentException().isThrownBy(() -> new SessionRepositoryMessageInterceptor<>(null))
.withMessage("sessionRepository cannot be null");
}
@Test
public void preSendNullMessage() {
void preSendNullMessage() {
assertThat(this.interceptor.preSend(null, this.channel)).isNull();
}
@Test
public void preSendConnectAckDoesNotInvokeSessionRepository() {
void preSendConnectAckDoesNotInvokeSessionRepository() {
setMessageType(SimpMessageType.CONNECT_ACK);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verifyZeroInteractions(this.sessionRepository);
}
@Test
public void preSendHeartbeatDoesNotInvokeSessionRepository() {
void preSendHeartbeatDoesNotInvokeSessionRepository() {
setMessageType(SimpMessageType.HEARTBEAT);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verifyZeroInteractions(this.sessionRepository);
}
@Test
public void preSendDisconnectDoesNotInvokeSessionRepository() {
void preSendDisconnectDoesNotInvokeSessionRepository() {
setMessageType(SimpMessageType.DISCONNECT);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verifyZeroInteractions(this.sessionRepository);
}
@Test
public void preSendOtherDoesNotInvokeSessionRepository() {
void preSendOtherDoesNotInvokeSessionRepository() {
setMessageType(SimpMessageType.OTHER);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verifyZeroInteractions(this.sessionRepository);
}
@Test
public void setMatchingMessageTypesNull() {
void setMatchingMessageTypesNull() {
assertThatIllegalArgumentException().isThrownBy(() -> this.interceptor.setMatchingMessageTypes(null))
.withMessage("matchingMessageTypes cannot be null or empty");
}
@Test
void setMatchingMessageTypesEmpty() {
assertThatIllegalArgumentException()
.isThrownBy(() -> this.interceptor.setMatchingMessageTypes(null))
.isThrownBy(() -> this.interceptor.setMatchingMessageTypes(Collections.emptySet()))
.withMessage("matchingMessageTypes cannot be null or empty");
}
@Test
public void setMatchingMessageTypesEmpty() {
assertThatIllegalArgumentException().isThrownBy(
() -> this.interceptor.setMatchingMessageTypes(Collections.emptySet()))
.withMessage("matchingMessageTypes cannot be null or empty");
}
@Test
public void preSendSetMatchingMessageTypes() {
void preSendSetMatchingMessageTypes() {
this.interceptor.setMatchingMessageTypes(EnumSet.of(SimpMessageType.DISCONNECT));
setMessageType(SimpMessageType.DISCONNECT);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verify(this.sessionRepository).findById(anyString());
verify(this.sessionRepository).save(this.session);
}
@Test
public void preSendConnectUpdatesLastUpdateTime() {
void preSendConnectUpdatesLastUpdateTime() {
setMessageType(SimpMessageType.CONNECT);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verify(this.session).setLastAccessedTime(argThat(isAlmostNow()));
verify(this.sessionRepository).save(this.session);
}
@Test
public void preSendMessageUpdatesLastUpdateTime() {
void preSendMessageUpdatesLastUpdateTime() {
setMessageType(SimpMessageType.MESSAGE);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verify(this.session).setLastAccessedTime(argThat(isAlmostNow()));
verify(this.sessionRepository).save(this.session);
}
@Test
public void preSendSubscribeUpdatesLastUpdateTime() {
void preSendSubscribeUpdatesLastUpdateTime() {
setMessageType(SimpMessageType.SUBSCRIBE);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verify(this.session).setLastAccessedTime(argThat(isAlmostNow()));
verify(this.sessionRepository).save(this.session);
}
@Test
public void preSendUnsubscribeUpdatesLastUpdateTime() {
void preSendUnsubscribeUpdatesLastUpdateTime() {
setMessageType(SimpMessageType.UNSUBSCRIBE);
this.session.setLastAccessedTime(Instant.EPOCH);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verify(this.session).setLastAccessedTime(argThat(isAlmostNow()));
verify(this.sessionRepository).save(this.session);
@@ -204,7 +195,7 @@ public class SessionRepositoryMessageInterceptorTests {
// This will updated when SPR-12288 is resolved
@Test
public void preSendExpiredSession() {
void preSendExpiredSession() {
setSessionId("expired");
this.interceptor.preSend(createMessage(), this.channel);
@@ -213,74 +204,67 @@ public class SessionRepositoryMessageInterceptorTests {
}
@Test
public void preSendNullSessionId() {
void preSendNullSessionId() {
setSessionId(null);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verifyZeroInteractions(this.sessionRepository);
}
@Test
public void preSendNullSessionAttributes() {
void preSendNullSessionAttributes() {
this.headers.setSessionAttributes(null);
assertThat(this.interceptor.preSend(createMessage(), this.channel))
.isSameAs(this.createMessage);
assertThat(this.interceptor.preSend(createMessage(), this.channel)).isSameAs(this.createMessage);
verifyZeroInteractions(this.sessionRepository);
}
@Test
public void beforeHandshakeNotServletServerHttpRequest() throws Exception {
void beforeHandshakeNotServletServerHttpRequest() throws Exception {
assertThat(this.interceptor.beforeHandshake(null, null, null, null)).isTrue();
verifyZeroInteractions(this.sessionRepository);
}
@Test
public void beforeHandshakeNullSession() throws Exception {
ServletServerHttpRequest request = new ServletServerHttpRequest(
new MockHttpServletRequest());
void beforeHandshakeNullSession() throws Exception {
ServletServerHttpRequest request = new ServletServerHttpRequest(new MockHttpServletRequest());
assertThat(this.interceptor.beforeHandshake(request, null, null, null)).isTrue();
verifyZeroInteractions(this.sessionRepository);
}
@Test
public void beforeHandshakeSession() throws Exception {
void beforeHandshakeSession() throws Exception {
MockHttpServletRequest httpRequest = new MockHttpServletRequest();
HttpSession httpSession = httpRequest.getSession();
ServletServerHttpRequest request = new ServletServerHttpRequest(httpRequest);
Map<String, Object> attributes = new HashMap<>();
assertThat(this.interceptor.beforeHandshake(request, null, null, attributes))
.isTrue();
assertThat(this.interceptor.beforeHandshake(request, null, null, attributes)).isTrue();
assertThat(attributes.size()).isEqualTo(1);
assertThat(SessionRepositoryMessageInterceptor.getSessionId(attributes))
.isEqualTo(httpSession.getId());
assertThat(SessionRepositoryMessageInterceptor.getSessionId(attributes)).isEqualTo(httpSession.getId());
}
/**
* At the moment there is no need for afterHandshake to do anything.
*/
@Test
public void afterHandshakeDoesNothing() {
void afterHandshakeDoesNothing() {
this.interceptor.afterHandshake(null, null, null, null);
verifyZeroInteractions(this.sessionRepository);
}
private void setSessionId(String id) {
SessionRepositoryMessageInterceptor
.setSessionId(this.headers.getSessionAttributes(), id);
SessionRepositoryMessageInterceptor.setSessionId(this.headers.getSessionAttributes(), id);
}
private Message<?> createMessage() {
this.createMessage = MessageBuilder.createMessage("",
this.headers.getMessageHeaders());
this.createMessage = MessageBuilder.createMessage("", this.headers.getMessageHeaders());
return this.createMessage;
}
@@ -302,4 +286,5 @@ public class SessionRepositoryMessageInterceptorTests {
}
}
}