I have a HttpFilter (Added before AbstractPreAuthenticatedProcessingFilter
) that is supposed to write a mock user to a database. However, it is seemingly silently failing (The repository save call returns the new user, but nothing is persisted to the database). Making this call outside of the filter context works without issue.
@Component
@RequiredArgsConstructor
public class MockUserFilter extends HttpFilter {
private final PlayerRepository playerRepository;
private final EntityManager entityManager;
@Override
protected void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain) throws IOException, ServletException {
String userId = request.getHeader("X-Mock-User");
if (userId != null) {
DiscordUser user = createMockUser(userId);
SecurityContextHolder.getContext().setAuthentication(new OAuth2AuthenticationToken(
user,
user.getAuthorities(),
user.getId()
));
updateOrCreatePlayer(user); //This was a call to a service, but put here to test jpa.
}
chain.doFilter(request, response);
}
private DiscordUser createMockUser(String userId) {
return new DiscordUser(null, new HashMap<>() {{
put("id", userId);
put("username", userId);
}});
}
}
I have tried adding transaction management, using flush etc.
Here is the player entity for reference:
@Entity
@Getter
@Setter
@EqualsAndHashCode(onlyExplicitlyIncluded = true)
@NoArgsConstructor
public class Player {
@Id
@EqualsAndHashCode.Include
private String id;
@Column(nullable = false)
private String username;
@Column(nullable = false)
private String avatar;
@ManyToMany
@JoinTable(
name = "player_followers",
joinColumns = { @JoinColumn(name = "follower_id") },
inverseJoinColumns = { @JoinColumn(name = "following_id") }
)
private Set<Player> following;
@ManyToMany(mappedBy = "following")
private Set<Player> followers;
}
Is it possible perhaps to enable detailed logging for repository operations?
At a bit of a loss with where to go from here, any advice is appreciated.
1