Я работаю над проектом для клиента с весенней версией 4.3.9.RELEASE и весенней защитой 4.2.3.RELEASE.Это не весенний загрузочный проект.(Хотя я добавил зависимости Spring-boot-web-starter и spring-boot-security-starter версии 2.1.2.RELEASE при попытке реализовать OAuth2.0. Я хорошо справляюсь с решением, основанным на этих зависимостях, котороеНа основе XML.)
Моя задача - внедрить вход OAuth2.0 с помощью Google в приложение, используя подход на основе XML (не подход @Annotations), и я не могу найти соответствующий ресурс для этого.Это должно быть легко сделать все еще, я изо всех сил.
Мой текущий spring-security.xml выглядит так:
<beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-4.3.xsd
http://www.springframework.org/schema/security
http://www.springframework.org/schema/security/spring-security-4.2.xsd">
<http use-expressions="true" create-session="never" auto-config="false" entry-point-ref="loginUrlAuthenticationEntryPoint">
<csrf disabled="true"/>
<headers>
<frame-options policy="SAMEORIGIN" />
</headers>
<custom-filter position="BASIC_AUTH_FILTER" ref="sessionTerminatingBasicAuthFilter" />
<intercept-url pattern="/ui/signin" access="permitAll" />
<intercept-url pattern="/**/*.png" access="permitAll" />
<intercept-url pattern="/**/*.css" access="permitAll" />
<intercept-url pattern="/**/*.ico" access="permitAll" />
<intercept-url pattern="/**" access="isAuthenticated()" />
<!-- the login page is a wicket page mounted in WicketApplication.init() -->
<form-login login-page="/signin" default-target-url='/ui/intro' always-use-default-target='false' authentication-success-handler-ref="authenticationSuccessHandler"/>
</http>
<beans:bean class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
<beans:property name="locations">
<beans:list>
<beans:value>classpath:application.properties</beans:value>
</beans:list>
</beans:property>
</beans:bean>
<authentication-manager alias="authenticationManager">
<authentication-provider>
<user-service>
<user name="${application.configuration.security.default.username}"
password="{noop}${application.configuration.security.default.password}"
authorities="${application.configuration.security.admin.role}" />
<user name="${application.configuration.security.read.username}"
password="{noop}${application.configuration.security.read.password}"
authorities="${application.configuration.security.read.role}" />
<user name="${application.configuration.security.write.username}"
password="{noop}${application.configuration.security.write.password}"
authorities="${application.configuration.security.write.role}" />
</user-service>
</authentication-provider>
</authentication-manager>
<beans:bean id="authenticationSuccessHandler" class="org.springframework.security.web.authentication.SavedRequestAwareAuthenticationSuccessHandler"/>
<beans:bean id="exceptionTranslationFilter" class="org.springframework.security.web.access.ExceptionTranslationFilter">
<beans:constructor-arg name="authenticationEntryPoint">
<beans:ref bean="loginUrlAuthenticationEntryPoint"/>
</beans:constructor-arg>
<beans:constructor-arg name="requestCache">
<beans:ref bean="httpSessionRequestCache" />
</beans:constructor-arg>
</beans:bean>
<beans:bean id="httpSessionRequestCache" class="org.springframework.security.web.savedrequest.HttpSessionRequestCache"/>
<beans:bean id="loginUrlAuthenticationEntryPoint" class="some.package.SaveRequestBeforeLoginUrlAuthenticationEntryPoint">
<beans:constructor-arg value="/signin" /> <!-- loginFormUrl -->
</beans:bean>
<!-- Custom authentication details on basic authentication -->
<beans:bean id="sessionTerminatingBasicAuthFilter"
class="org.springframework.security.web.authentication.www.BasicAuthenticationFilter">
<beans:constructor-arg name="authenticationManager">
<beans:ref bean="authenticationManager"/>
</beans:constructor-arg>
<beans:property name="authenticationDetailsSource" ref="sessionTerminatingAuthDetailSource"/>
</beans:bean>
<!-- Automatic session termination on basic authentication -->
<beans:bean id="sessionTerminatingAuthDetailSource"
class="some.package.TerminateSessionAfterRequestAuthenticationDetailsSource" />
<!-- This filter is responsible for storing the SecurityContextHolder between
requests. Also see SecureWebSession.authenticate(). -->
<beans:bean id="securityContextPersistenceFilter"
class="org.springframework.security.web.context.SecurityContextPersistenceFilter" />
</beans:beans>
Он имеет базовую аутентификацию, то есть комбинацию имени пользователя и пароля в жестком коде (длядемонстрационная цель), и он работает с этой аутентификацией.
Мой файл application.properties имеет следующие свойства (наряду с другими):
spring.security.oauth2.client.registration.google.client-id=CLIENT_ID
spring.security.oauth2.client.registration.google.client-secret=CLIENT-SECRET
Требование : Я хочуреализовать OAuth2.0, где пользователь может войти в систему только с использованием подхода Google XML.
То, что я пробовал :
- Проверено почти каждыйстатья по этой теме доступна в поиске Google.Предоставляемое ими решение зависит от SpringBoot или не использует подход на основе XML.
- Проверен пример программы тонра в весеннем репозитории oauth2 https://github.com/spring-projects/spring-security-oauth/tree/master/samples/oauth2/tonr.Он работает нормально, но мне нужно решение XML.
- Перепробовал многие из Spring Boot и другие примеры, они работают нормально.Но я не смог связать их решения с моим приложением.
- Удалил тег
<form-login >...</form-login>
из <http>
и попытался с OAuth2AuthenticationEntryPoint
, но не смог успешно запустить файл войны. - Попытка использовать
OAuth2LoginAuthenticationProvider
для аутентификации не смогла найти работающее решение.
В целом мне нужно решение или некоторая документация, к которой я могу обратиться и успешно реализовать аутентификацию OAuth2.0 с помощьюПодход на основе XML без SpringBoot (предпочтительно).
Я не новичок в программировании, однако я относительно новичок в Spring.Я понимаю основные понятия о бобах и о том, как их можно использовать в Spring, и еще немного.
Также, пожалуйста, предложите хороший справочник для изучения Spring, с которым новый человек может понять основы и не запутатьсяпо статьям на темы Spring.
Заранее благодарен за помощь!