Skip to content

Commit bb891a2

Browse files
committed
Fixed build
1 parent 510015c commit bb891a2

1 file changed

Lines changed: 56 additions & 0 deletions

File tree

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
package invite.security;
2+
3+
import invite.exception.UserRestrictionException;
4+
import jakarta.servlet.FilterChain;
5+
import jakarta.servlet.ServletException;
6+
import jakarta.servlet.http.HttpServletRequest;
7+
import jakarta.servlet.http.HttpServletResponse;
8+
import org.springframework.security.authentication.UsernamePasswordAuthenticationToken;
9+
import org.springframework.security.core.Authentication;
10+
import org.springframework.security.core.AuthenticationException;
11+
import org.springframework.security.core.GrantedAuthority;
12+
import org.springframework.security.core.authority.SimpleGrantedAuthority;
13+
import org.springframework.security.core.context.SecurityContextHolder;
14+
import org.springframework.security.web.context.SecurityContextRepository;
15+
import org.springframework.web.filter.OncePerRequestFilter;
16+
17+
import java.io.IOException;
18+
import java.util.List;
19+
20+
import static invite.security.SecurityConfig.API_KEY_HEADER;
21+
22+
public class CrmApiKeyAuthFilter extends OncePerRequestFilter {
23+
24+
private final String crmApiKeyHeader;
25+
private final SecurityContextRepository securityContextRepository;
26+
27+
public CrmApiKeyAuthFilter(String crmApiKeyHeader,
28+
SecurityContextRepository securityContextRepository) {
29+
this.crmApiKeyHeader = crmApiKeyHeader;
30+
this.securityContextRepository = securityContextRepository;
31+
}
32+
33+
@Override
34+
protected void doFilterInternal(HttpServletRequest request,
35+
HttpServletResponse response,
36+
FilterChain filterChain) throws ServletException, IOException {
37+
38+
String headerValue = request.getHeader(API_KEY_HEADER);
39+
40+
if (crmApiKeyHeader.equals(headerValue)) {
41+
// Build an Authentication with ROLE_CRM granted authority
42+
List<GrantedAuthority> authorities = List.of(new SimpleGrantedAuthority("ROLE_" + Scope.crm.name().toUpperCase()));
43+
Authentication authentication =
44+
new UsernamePasswordAuthenticationToken("crm-client", null, authorities);
45+
SecurityContextHolder.getContext().setAuthentication(authentication);
46+
//New in Spring security 6.x,
47+
// See https://docs.spring.io/spring-security/reference/5.8/migration/servlet/session-management.html#_require_explicit_saving_of_securitycontextrepository
48+
securityContextRepository.saveContext(SecurityContextHolder.getContext(), request, response);
49+
} else {
50+
throw new UserRestrictionException("Wrong or absent API-KEY header");
51+
}
52+
53+
54+
filterChain.doFilter(request, response);
55+
}
56+
}

0 commit comments

Comments
 (0)