4.7.2.6. Собственные контроллеры, защищенные OAuth2
Если вам необходимо создать свой REST контроллер, защищенный с помощью OAuth2, сделайте следующее:
-
Предположим, ваш контроллер выглядит следующим образом:
package com.company.test.portal.myapi; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import com.company.test.services.SomeService; @RestController @RequestMapping("/myapi") public class MyController { @Inject protected SomeService someService; @GetMapping("/dosmth") public String doSmth() { return someService.getResult(); } }
-
Создайте новый файл конфигурации Spring с именем
rest-dispatcher-spring.xml
внутри корневого пакета (например,com.company.test
) модуля web или portal. Содержимое файла должно быть следующим:<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:security="http://www.springframework.org/schema/security" xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-4.3.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-4.3.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.1.xsd"> <!-- Define a base package for your controllers--> <context:component-scan base-package="com.company.test.portal.myapi"/> <security:http pattern="/rest/myapi/**" create-session="stateless" entry-point-ref="oauthAuthenticationEntryPoint" xmlns="http://www.springframework.org/schema/security"> <!-- Specify one or more protected URL patterns--> <intercept-url pattern="/rest/myapi/**" access="isAuthenticated()"/> <anonymous enabled="false"/> <csrf disabled="true"/> <cors configuration-source-ref="cuba_RestCorsSource"/> <custom-filter ref="resourceFilter" before="PRE_AUTH_FILTER"/> <custom-filter ref="cuba_AnonymousAuthenticationFilter" after="PRE_AUTH_FILTER"/> </security:http> </beans>
-
Задайте аддитивное свойство приложения
cuba.restSpringContextConfig
в файле свойств соответствующего модуля, например, вportal-app.properties
:cuba.restSpringContextConfig = +com/company/test/rest-dispatcher-spring.xml
-
Новый контроллер будет помещен в контекст, связанный с сервлетом
CubaRestApiServlet
, поэтому URL для доступа к методам контроллера будут начинаться с/rest
, т.е. метод doSmth() будет доступен по адресу:http://localhost:8080/app-portal/rest/myapi/dosmth
.WarningАдреса для доступа к методам кастомных контроллеров НЕ ДОЛЖНЫ начинаться с
/rest/v2
.