Я использую 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 ().
SecurityContextHolder
, добавьте их к своим защищенным URL-адресам и добавьтеpermitAll
, чтобы разрешить доступ для всех, не игнорируйте их. - person M. Deinum   schedule 19.08.2015httpSecurity.authorizeRequests().antMatchers("/api/v1/resource1").permitAll()
в метод WebSecurityConfigurerAdapter.configure, но это не помогло. Я также много искал другие варианты, но пока безуспешно. Куда мне добавить этот URL и получить ожидаемое поведение? Приложение также использует OAuth2, который настраивается отдельно. - person Syed Waqas   schedule 20.08.2015