Весенний вход с любыми деталями

Кто-нибудь знает в Spring способ реализации пользовательского сервиса или провайдера аутентификации, который будет принимать любого пользователя при входе в систему?

Это дальше к моему предыдущему вопросу: spring-ws получает имя пользователя и пароль

У меня есть базовая настройка безопасности в моем проекте spring-ws:

<security:http auto-config="true">
    <security:intercept-url pattern="/**" access="ROLE_USER" />
    <security:intercept-url pattern="/*.wsdl" access="ROLE_USER" />
    <security:http-basic/>
</security:http>

<security:authentication-manager erase-credentials="false">
    <security:authentication-provider user-service-ref="userService">
        <security:user-service>
            <security:user name="me" password="mypass"
                authorities="ROLE_USER" />
        </security:user-service>
    </security:authentication-provider>
</security:authentication-manager>

Я не хочу указывать пользователей в пользовательском сервисе, я хочу, чтобы пользователь с любыми данными имел доступ, я просто хочу убедиться, что пользователь дает имя пользователя и пароль, и чтобы я мог получить к нему доступ из SecurityContextHolder,

Нужно ли для этого реализовывать свой собственный пользовательский сервис или провайдер аутентификации, и если да, то может ли кто-нибудь указать на пример или предоставить мне один?

Спасибо!

3 ответа

Решение

Вы должны предоставить свой собственный AuthenticationProvider то есть реализация org.springframework.security.authentication.AuthenticationProvider интерфейс.

<security:authentication-manager alias="authenticationManager">
  <security:authentication-provider ref="myProvider" />
</security:authentication-manager>

<bean id="myProvider" class="MyProvider"/>

MyProvider Затем можно либо делегировать обычай UserDetailsService установить полномочия (роли) или установить ROLE_USER непосредственно.

Если вы измените

<security:http auto-config="true">

в

<security:http auto-config="true" use-expressions="true">

Затем вы можете установить свои перехваты от

<security:intercept-url pattern="/**" access="ROLE_USER" />
<security:intercept-url pattern="/*.wsdl" access="ROLE_USER" />

в

<security:intercept-url pattern="/**" access="isAuthenticated()" />
<security:intercept-url pattern="/*.wsdl" access="isAuthenticated()" />

это позволит любому аутентифицированному пользователю получить доступ к этим шаблонам URL.

Вам нужно сделать следующее:

Настройте URL-адрес перехвата, чтобы обеспечить доступ к любым именам ролей. Вы можете сделать это, выполнив следующие действия:

<security:http auto-config="true">
     <security:intercept-url pattern="/**" access="IS_AUTHENTICATED_REMEMBERED" />
     <security:intercept-url pattern="/*.wsdl" access="IS_AUTHENTICATED_REMEMBERED" />
     <security:http-basic/>
</security:http>

Создайте свой собственный пользовательский сервис, который предоставляет как минимум одно право доступа пользователю для любой комбинации имени пользователя и пароля. Настройте Spring Security, чтобы использовать созданный вами сервис.

<bean id="userService" class="com.ek.UserService" />
<authentication-manager alias="authenticationManager">
    <authentication-provider user-service-ref="userService" />
</authentication-manager>

Я надеюсь, что это дает вам представление о том, что вам нужно сделать. Иначе, мы можем поработать над созданием примера кода для вас.

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