Я использовал подходы один и два, и, по моему мнению, если вы используете Spring Boot, используйте соответствующий адаптер, используйте адаптер Spring Security, если вы все еще используете обычный Spring MVC. Я никогда не видел необходимости в третьем подходе, так как в основном вы должны делать все самостоятельно, почему бы никому не использовать первые два метода?
Что касается использования адаптера Spring Bood, единственная необходимая конфигурация это следующее:
keycloak:
bearer-only: true
auth-server-url: your-url
realm: your-realm
resource: your-resource
И все готово. Только для канала-носителя вы возвращаете 401, если клиент приходит без маркера-носителя и не перенаправляется на страницу входа, как вы хотели. По крайней мере, это то, что работает для нас: -)
После этого вы можете либо использовать конфигурацию для защиты конечных точек, но это немного более гибко, либо использовать httpSecurity или @EnableGlobalMethodSecurity, что мы делаем, например, с @Secured ({"ROLE_whwhat_role"}).
Если вы используете новейшую версию Spring Boot в сочетании с Spring Cloud, вы можете столкнуться с этой проблемой .