Вы должны использовать .authenticated()
вместо .permitAll()
:
.authorizeRequests()
.antMatchers("/swagger-resources/*", "*.html", "/api/v1/swagger.json")
.hasRole("SWAGGER")
.anyRequest()
.authenticated()
Это будет:
Ограничить доступ ко всем ресурсам, соответствующим /swagger-resources/*
, *.html
и /api/v1/swagger.json
Разрешить неаутентифицированный доступ ко всем другим ресурсам
Чтобы выяснить, почему ваша конфигурация не работает, это потому, что вы не читаете Spring-Security, как вы должны читать.
Ваша старая конфигурация выглядит так:
.authorizeRequests() // allow requests
.antMatchers(...) // that matches this
.hasAuthority("SWAGGER") // with SWAGGER authority
.anyRequest() // All requests above
.permitAll() // grant full access
Другими словами, вы предоставляете полный доступ пользователям с правами доступа SWAGGER
, но вы пренебрегали тем, что по умолчанию они уже имеют к нему доступ. Точнее, каждый имеет к нему доступ, если не указано иное .
Используя .authenticated()
. вы говорите Spring, что хотите, чтобы все соответствующие запросы были разрешены только для людей с правильными role
или authority
.
Новая конфигурация:
.authorizeRequests() // allow requests
.antMatchers(...) // that matches this
.hasRole("SWAGGER") // with role SWAGGER
.anyRequest() // all requests above
.authenticated() // needs authentication
Обновление
Относительно вашей проблемы с /swagger-resources
, /swagger-resources/configuration/security
и swagger-resources/configuration/ui
, возвращающими 401:
Вам следует заменить /swagger-resources/*
на /swagger-resources/**
.
Обновление 2
Добавьте следующее в end вашей конфигурации, чтобы разрешить все несопоставленные запросы:
.authorizeRequests()
.anyRequest()
.permitAll();