Весенний вход с любыми деталями
Кто-нибудь знает в 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>
Я надеюсь, что это дает вам представление о том, что вам нужно сделать. Иначе, мы можем поработать над созданием примера кода для вас.