Я нашел способ использовать фильтры в Spring Security, извлечь API-ключ из заголовка и проверьте ключ перед конечной точкой доступа, но это не связано с keylock, в этом процессе необходимо использовать keylock, поэтому как сгенерировать API-ключ в KeyClock и использовать этот API-ключ в заголовке каждый раз, когда клиент отправляет, и в keylock фильтра проверяет этот API-ключ, важным моментом здесь является заставить KeyClock генерировать API-ключ и играть центральную точку в этом процессе
это мой уже определенный код
ApiKeyAuthFilter.java
Код: Выделить всё
@Component
public class ApiKeyAuthFilter extends OncePerRequestFilter {
@Value("${api.key}")
private String key;
@Override
protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain)
throws ServletException, IOException {
String apiKey = request.getHeader("X-API-KEY");
if (apiKey != null && apiKey.equals(key)) {
UsernamePasswordAuthenticationToken authentication =
new UsernamePasswordAuthenticationToken(apiKey, null,
List.of(new SimpleGrantedAuthority("ROLE_SSS")));
authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request));
SecurityContextHolder.getContext().setAuthentication(authentication);
}
filterChain.doFilter(request, response);
}
}
Код: Выделить всё
@Configuration
@EnableWebSecurity
@EnableMethodSecurity
public class SecurityConfig {
@Autowired
JwtAuthConverter jwtAuthConverter;
@Autowired
ApiKeyAuthFilter apiKeyAuthFilter;
@Bean
SecurityFilterChain resourceServerFilterChain(HttpSecurity http) throws Exception {
http.csrf(AbstractHttpConfigurer::disable)
.authorizeHttpRequests(auth -> auth.anyRequest().authenticated());
http.addFilterBefore(apiKeyAuthFilter, UsernamePasswordAuthenticationFilter.class);
http.sessionManagement(session -> session.sessionCreationPolicy(SessionCreationPolicy.STATELESS));
return http.build();
}
}
поддерживает ли клавиатура этот процесс?
Подробнее здесь: https://stackoverflow.com/questions/787 ... g-security