2015-12-16 4 views
3

Я добавляю аутентификацию в свой API, используя общие ограничения безопасности для Интернета, но, похоже, он сломал мой фильтр CORS. Ранее я работал с фильтром и без проверки подлинности на уровне сервера приложений.Поддержка jBoss CORS с ограничениями безопасности

Основная идея состоит в том, чтобы требовать аутентификации во всех запросах, ожидающих те, которые находятся в конечной точке/rest/account, так как это те, которые обрабатывают начальный логин и поэтому должны быть общедоступными.

Тестирование как в Chrome, так и в Postman возвращает 405 метод не разрешенного ответа, когда вызов OPTIONS выполняется как часть запроса POST при попытке входа в систему.

Надеюсь, я предоставил все, что уместно ниже, но дайте мне знать, если что-то еще необходимо. Заранее спасибо!

Мои CORS фильтр

<filter> 
    <filter-name>CORS</filter-name> 
    <filter-class>com.thetransactioncompany.cors.CORSFilter</filter-class> 
    <init-param> 
     <param-name>cors.supportedMethods</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.supportedHeaders</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.allowOrigin</param-name> 
     <param-value>*</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.allowSubdomains</param-name> 
     <param-value>true</param-value> 
    </init-param> 
    <init-param> 
     <param-name>cors.supportsCredentials</param-name> 
     <param-value>true</param-value> 
    </init-param> 
</filter> 
<filter-mapping> 
    <filter-name>CORS</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

Мои ограничения безопасности

<security-constraint> 
    <display-name>WebsiteUsers</display-name> 
    <web-resource-collection> 
     <web-resource-name>WebsiteAPI</web-resource-name> 
     <description/> 
     <url-pattern>/rest/*</url-pattern> 
    </web-resource-collection> 
    <auth-constraint> 
     <description>Standard User authentication</description> 
     <role-name>Users</role-name> 
    </auth-constraint> 
</security-constraint> 

<security-constraint> 
    <web-resource-collection> 
     <web-resource-name>Public</web-resource-name> 
     <description>Matches a few special endpoints</description> 
     <url-pattern>/rest/account/*</url-pattern> 
    </web-resource-collection> 
    <!-- No auth-constraint means everybody has access! --> 
</security-constraint> 

ответ

1

Попробуйте добавить <http-method-omission>OPTIONS</http-method-omission> к защищенному <web-resource-collection>. Это должно разрешить запрос OPTIONS на ваш фильтр CORS (который затем отправит обратно Access-Control-Allow-Methods ответный заголовок).

См https://docs.oracle.com/cd/E19798-01/821-1841/bncbk/index.html

В качестве альтернативы (если вам необходимо поддерживать сервлета спецификации < 3.0) можно определить все методы, которые требуют аутентификации вместо (GET, POST, DELETE, PUT и т.д. - кроме OPTIONS) - с использованием <http-method>

 Смежные вопросы

  • Нет связанных вопросов^_^