SecurityContextHolder.getContext (). GetAuthenticated возвращает значение null, когда URL-адрес добавлен в конфигурацию WebSecurity

Я использую Spring Security в своем приложении, и у меня есть REST API. API аутентифицирует пользователя, который пытается получить доступ к API, а также я использую реализацию ACL Spring (размещенную как аннотации PreAuthorize, PostAuthorize и т. Д.).

Проблема в том, что есть некоторые ресурсы, к которым могут получить доступ пользователи, не вошедшие в систему, и некоторые операции с этими ресурсами могут использоваться только зарегистрированными пользователями. Чтобы предоставить доступ пользователям, не вошедшим в систему, я добавил эти URL-адреса в класс SecurityConfiguration:

@Configuration
@EnableWebSecurity
@EnableGlobalMethodSecurity(prePostEnabled = true, securedEnabled = true)
@ImportResource("classpath:acl-config.xml")
public class SecurityConfiguration extends WebSecurityConfigurerAdapter {
    @Override
    public void configure(WebSecurity web) throws Exception {
        web.ignoring()
        .antMatchers("/api/v1/resource1")
        .antMatchers("/api/v1/resource2")
        ....

Теперь проблема в том, что всякий раз, когда кто-либо обращается к resource1 или resource2, SecurityContextHolder.getContext (). GetAuthentication () возвращает null. Это вызывает проблемы, поскольку я использую реализацию ACL Spring, а исходные файлы реализации используют метод SecurityContextHolder.getContext (). GetAuthentication () и возвращают значение null. Значит, ACL перестал работать. В моем собственном коде я могу получить экземпляр аутентификации, упомянутый здесь но не в исходных файлах ACL.

Я хотел бы сделать что-то в конфигурации разово, чтобы даже если я предоставлю URL-адреса в SecurityConfiguration, я все равно смогу получить экземпляр SecurityContextHolder.getContext (). GetAuthentication ().


person Syed Waqas    schedule 19.08.2015    source источник
comment
как вы думаете, что делает игнорирование? Добавление URL-адресов полностью игнорирует Spring Security для этих URL-адресов. Если вы хотите разрешить доступ всем и иметь возможность использовать SecurityContextHolder, добавьте их к своим защищенным URL-адресам и добавьте permitAll, чтобы разрешить доступ для всех, не игнорируйте их.   -  person M. Deinum    schedule 19.08.2015
comment
Хорошо, Дениум. Я попытался защитить URL-адреса, добавив httpSecurity.authorizeRequests().antMatchers("/api/v1/resource1").permitAll() в метод WebSecurityConfigurerAdapter.configure, но это не помогло. Я также много искал другие варианты, но пока безуспешно. Куда мне добавить этот URL и получить ожидаемое поведение? Приложение также использует OAuth2, который настраивается отдельно.   -  person Syed Waqas    schedule 20.08.2015
comment
У вас их убрали из игнорирования веб-безопасности? Убедитесь, что порядок авторизации правильный, и что ни одно правило безопасности не сработало раньше, порядок сопоставлений муравьев также является порядком, в котором они консультируются !.   -  person M. Deinum    schedule 20.08.2015