Merge remote-tracking branch 'origin/development' into development

This commit is contained in:
Damian Büchel 2022-01-06 09:29:38 +01:00
commit ec4938d57e
5 changed files with 36 additions and 12 deletions

View file

@ -14,8 +14,14 @@ import java.util.Map;
import java.util.Set;
import org.apache.commons.lang3.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.event.EventListener;
import org.springframework.scheduling.annotation.Async;
import ch.ethz.seb.sebserver.SEBServerInitEvent;
import ch.ethz.seb.sebserver.gbl.Constants;
import ch.ethz.seb.sebserver.gbl.async.AsyncServiceSpringConfig;
import ch.ethz.seb.sebserver.gbl.model.session.ClientInstruction;
import ch.ethz.seb.sebserver.gbl.model.session.ClientInstruction.InstructionType;
import ch.ethz.seb.sebserver.gbl.util.Result;
@ -27,11 +33,31 @@ import ch.ethz.seb.sebserver.webservice.WebserviceInfo;
* If there is an instruction in the queue for a specified SEB Client. */
public interface SEBClientInstructionService {
static final Logger log = LoggerFactory.getLogger(SEBClientInstructionService.class);
/** Get the underling WebserviceInfo
*
* @return the underling WebserviceInfo */
WebserviceInfo getWebserviceInfo();
/** This is called from the SEB Server initializer to initialize this service.
* Do not use this directly. */
@EventListener(SEBServerInitEvent.class)
void init();
/** Used to register a SEB client instruction for one or more active client connections
* within an other background thread. This is none-blocking.
*
* @param clientInstruction the ClientInstruction instance to register
* @return A Result refer to a void marker or to an error if happened */
@Async(AsyncServiceSpringConfig.EXECUTOR_BEAN_NAME)
default void registerInstructionAsync(final ClientInstruction clientInstruction) {
registerInstruction(clientInstruction, false)
.onError(error -> log.error("Failed to register client instruction asynchronously: {}",
clientInstruction,
error));
}
/** Used to register a SEB client instruction for one or more active client connections
*
* @param clientInstruction the ClientInstruction instance to register

View file

@ -22,11 +22,9 @@ import org.joda.time.DateTimeZone;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.context.annotation.Lazy;
import org.springframework.context.event.EventListener;
import org.springframework.stereotype.Service;
import ch.ethz.seb.sebserver.SEBServerInit;
import ch.ethz.seb.sebserver.SEBServerInitEvent;
import ch.ethz.seb.sebserver.gbl.Constants;
import ch.ethz.seb.sebserver.gbl.api.JSONMapper;
import ch.ethz.seb.sebserver.gbl.model.EntityKey;
@ -80,7 +78,7 @@ public class SEBClientInstructionServiceImpl implements SEBClientInstructionServ
return this.webserviceInfo;
}
@EventListener(SEBServerInitEvent.class)
@Override
public void init() {
SEBServerInit.INIT_LOGGER.info("------>");
SEBServerInit.INIT_LOGGER.info("------> Run SEBInstructionService...");

View file

@ -222,7 +222,7 @@ public class ExamMonitoringController {
@Valid @RequestBody final ClientInstruction clientInstruction) {
checkPrivileges(institutionId, examId);
this.sebClientInstructionService.registerInstruction(clientInstruction);
this.sebClientInstructionService.registerInstructionAsync(clientInstruction);
}
@RequestMapping(

View file

@ -50,10 +50,6 @@ public class CachableJdbcTokenStore implements TokenStore {
}
@Override
@Cacheable(
cacheNames = CACHE_NAME,
key = "#token",
unless = "#result == null")
public OAuth2Authentication readAuthentication(final OAuth2AccessToken token) {
if (log.isDebugEnabled()) {
log.debug("Read authentication from persistent and cache if available");
@ -68,6 +64,10 @@ public class CachableJdbcTokenStore implements TokenStore {
}
@Override
@Cacheable(
cacheNames = CACHE_NAME,
key = "#tokenValue",
unless = "#result == null")
public OAuth2AccessToken readAccessToken(final String tokenValue) {
return this.jdbcTokenStore.readAccessToken(tokenValue);
}
@ -75,7 +75,7 @@ public class CachableJdbcTokenStore implements TokenStore {
@Override
@CacheEvict(
cacheNames = CACHE_NAME,
key = "#token")
key = "#token.getValue()")
public void removeAccessToken(final OAuth2AccessToken token) {
if (log.isDebugEnabled()) {
log.debug("Evict token from cache and remove it also from persistent store");

View file

@ -61,10 +61,10 @@
</cache>
<cache alias="ACCESS_TOKEN_STORE_CACHE">
<key-type>org.springframework.security.oauth2.common.OAuth2AccessToken</key-type>
<value-type>org.springframework.security.oauth2.provider.OAuth2Authentication</value-type>
<key-type>java.lang.String</key-type>
<value-type>org.springframework.security.oauth2.common.OAuth2AccessToken</value-type>
<expiry>
<ttl unit="hours">24</ttl>
<ttl unit="hours">1</ttl>
</expiry>
<resources>
<heap unit="entries">100</heap>