Вход в Google с использованием Spring 5 и OAuth2.0 на основе XML - PullRequest
0 голосов
/ 13 февраля 2019

Я работаю над проектом для клиента с весенней версией 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.

То, что я пробовал :

  1. Проверено почти каждыйстатья по этой теме доступна в поиске Google.Предоставляемое ими решение зависит от SpringBoot или не использует подход на основе XML.
  2. Проверен пример программы тонра в весеннем репозитории oauth2 https://github.com/spring-projects/spring-security-oauth/tree/master/samples/oauth2/tonr.Он работает нормально, но мне нужно решение XML.
  3. Перепробовал многие из Spring Boot и другие примеры, они работают нормально.Но я не смог связать их решения с моим приложением.
  4. Удалил тег <form-login >...</form-login> из <http> и попытался с OAuth2AuthenticationEntryPoint, но не смог успешно запустить файл войны.
  5. Попытка использовать OAuth2LoginAuthenticationProvider для аутентификации не смогла найти работающее решение.

В целом мне нужно решение или некоторая документация, к которой я могу обратиться и успешно реализовать аутентификацию OAuth2.0 с помощьюПодход на основе XML без SpringBoot (предпочтительно).

Я не новичок в программировании, однако я относительно новичок в Spring.Я понимаю основные понятия о бобах и о том, как их можно использовать в Spring, и еще немного.

Также, пожалуйста, предложите хороший справочник для изучения Spring, с которым новый человек может понять основы и не запутатьсяпо статьям на темы Spring.

Заранее благодарен за помощь!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...