Как разрешить анонимный доступ пользователей с локального хоста только в безопасности Spring?

Я хочу разрешить только запросы от локального хоста для определенного шаблона URL. Я пробовал это до сих пор:

<sec:intercept-url pattern = "/blabla/**" access = "hasIpAddress('127.0.0.1')" />

Но это не работает, и я получил следующее утверждение в выводе журнала:

Access is denied (user is anonymous); redirecting to authentication entry point

Итак, мой вопрос: как разрешить доступ анонимных пользователей только с локального хоста?

Попробуйте добавить номер порта с IP <sec:intercept-url pattern = "/blabla/**" access = "hasIpAddress('127.0.0.1:portnumber')" />

Sudhir Ojha 14.06.2019 12:40
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
3
1
4 236
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Взгляните на метод HttpSecurity::anonymous, включающий и обеспечивающий конфигурацию AnonymousConfigurer<H extends HttpSecurityBuilder<H>> анонимной аутентификации.

В вашем классе конфигурации Spring Security должен быть переопределяющий метод:

@Override
public void configure(HttpSecurity http) throws Exception {
    http.and()
        .anonymous()...          // enables and configures the anonymous access
    .and()
        .authorizeRequests()...

Можно ли выразить это отношение and() в конфигурации на основе XML?

eztam 14.06.2019 12:38
Ответ принят как подходящий

Is it possible to express this and() relation in XML based configuration?

Согласно документации здесь https://docs.spring.io/spring-security/site/docs/3.0.x/reference/el-access.html ниже должно работать.

Здесь мы определили, что область «blabla» приложения (определяемая шаблоном URL) должна быть доступна только анонимным пользователям, чей IP-адрес соответствует 127.0.0.1.

    <sec:intercept-url pattern = "/blabla/**"
        access = "isAnonymous() and hasIpAddress('127.0.0.1')"/>

когда я пытался использовать hasIpAddress('127.0.0.1'), он разрешал доступ только с IP-адреса, но запрещал доступ с localhost. Я заставил его работать, добавив его версию IP6 hasIpAddress('127.0.0.1') or hasIpAddress('::1')

Stan 27.08.2020 20:26

В итоге я использовал следующее:

http.authorizeRequests()
// restrict all requests unless coming from localhost IP4 or IP6
.antMatchers("/**").access("hasIpAddress(\"127.0.0.1\") or hasIpAddress(\"::1\")")

Я пробовал только с hasIpAddress("127.0.0.1"), который работал нормально, если я помещал этот IP-адрес в URL-адрес браузера, но он не работал с запросом его от localhost в качестве псевдонима.

Другие вопросы по теме