Skip to content

Commit d20461b

Browse files
committed
Merge remote-tracking branch 'origin/dev-1.2' into development
2 parents f56ddb0 + cb156f7 commit d20461b

File tree

3 files changed

+42
-11
lines changed

3 files changed

+42
-11
lines changed

src/main/java/ch/ethz/seb/sps/server/servicelayer/impl/ProctoringCacheService.java

Lines changed: 28 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010

1111
import java.util.Collection;
1212

13-
import ch.ethz.seb.sps.domain.model.service.ScreenshotData;
13+
import ch.ethz.seb.sps.domain.model.user.ServerUser;
1414
import ch.ethz.seb.sps.server.datalayer.batis.model.ScreenshotDataRecord;
1515
import ch.ethz.seb.sps.server.datalayer.dao.ScreenshotDataDAO;
16+
import ch.ethz.seb.sps.server.datalayer.dao.UserDAO;
1617
import org.slf4j.Logger;
1718
import org.slf4j.LoggerFactory;
1819
import org.springframework.cache.annotation.CacheEvict;
@@ -47,18 +48,23 @@ public class ProctoringCacheService {
4748
/** Total session count cache. */
4849
public static final String TOTAL_SESSION_COUNT = "TOTAL_SESSION_COUNT_CACHE";
4950

51+
public static final String SERVER_USER_CACHE = "SERVER_USER_CACHE";
52+
5053
private final ScreenshotDataDAO screenshotDataDAO;
5154
private final SessionDAO sessionDAO;
5255
private final GroupDAO groupDAO;
56+
private final UserDAO userDAO;
5357

5458
public ProctoringCacheService(
55-
final ScreenshotDataDAO screenshotDataDAO,
59+
final ScreenshotDataDAO screenshotDataDAO,
5660
final SessionDAO sessionDAO,
57-
final GroupDAO groupDAO) {
61+
final GroupDAO groupDAO,
62+
final UserDAO userDAO) {
5863

5964
this.screenshotDataDAO = screenshotDataDAO;
6065
this.sessionDAO = sessionDAO;
6166
this.groupDAO = groupDAO;
67+
this.userDAO = userDAO;
6268
}
6369

6470
@Cacheable(
@@ -180,4 +186,23 @@ public void evictSessionScreenshotData(final String sessionUUID) {
180186
}
181187
}
182188

189+
@Cacheable(
190+
cacheNames = SERVER_USER_CACHE,
191+
key = "#name",
192+
unless = "#result == null")
193+
public ServerUser serverUserByName(String name) {
194+
return userDAO.byUsername(name)
195+
.onError(error -> log.error("Failed to get ServerUser by name: {} cause: {}", name, error.getMessage()))
196+
.getOr(null);
197+
}
198+
199+
@CacheEvict(
200+
cacheNames = SERVER_USER_CACHE,
201+
key = "#name")
202+
public void evictServerUserByName(String name) {
203+
if (log.isTraceEnabled()) {
204+
log.trace("Eviction of ServerUser from cache, name: {}", name);
205+
}
206+
}
207+
183208
}

src/main/java/ch/ethz/seb/sps/server/servicelayer/impl/UserServiceImpl.java

Lines changed: 4 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -378,18 +378,15 @@ public interface ExtractUserFromAuthenticationStrategy {
378378
@Component
379379
public static class DefaultUserExtractStrategy implements ExtractUserFromAuthenticationStrategy {
380380

381-
final UserDAO userDAO;
381+
final ProctoringCacheService cacheService;
382382

383-
DefaultUserExtractStrategy(UserDAO userDAO) {
384-
this.userDAO = userDAO;
383+
DefaultUserExtractStrategy(final ProctoringCacheService cacheService) {
384+
this.cacheService = cacheService;
385385
}
386386

387387
@Override
388388
public ServerUser extract(final Principal principal) {
389-
String name = principal.getName();
390-
return userDAO.byUsername(name)
391-
.onError(error -> log.warn("Failed to find user for token authentication: {}", name))
392-
.getOr(null);
389+
return cacheService.serverUserByName(principal.getName());
393390
}
394391
}
395392

src/main/resources/config/ehcache.xml

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,15 @@
6060
</resources>
6161
</cache>
6262

63-
63+
<cache alias="SERVER_USER_CACHE">
64+
<key-type>java.lang.String</key-type>
65+
<value-type>ch.ethz.seb.sps.domain.model.user.ServerUser</value-type>
66+
<expiry>
67+
<ttl unit="minutes">10</ttl>
68+
</expiry>
69+
<resources>
70+
<heap unit="entries">100</heap>
71+
</resources>
72+
</cache>
6473

6574
</config>

0 commit comments

Comments
 (0)