Я хочу защитить какой-либо ресурс с помощью WAR (я использую Wildfly 16 и Keycloak 9.0.2).
В сети. xml Я добавляю ограничение безопасности:
<security-constraint>
<display-name>Web service</display-name>
<web-resource-collection>
<web-resource-name>webserviceapi</web-resource-name>
<url-pattern>/api/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>*</role-name>
</auth-constraint>
<user-data-constraint>
<transport-guarantee>CONFIDENTIAL</transport-guarantee>
</user-data-constraint>
</security-constraint>
Если я вызываю веб-службу, например / api / country / delete / 1, система запрашивает логин. Хорошо, это правильно.
Теперь мне нужно назвать какой-то веб-сервис анонимным, например / api / country / list (но не /api/country/delete/1).
I я пробовал через undertow:
public class CustomHandlerExtension implements io.undertow.servlet.ServletExtension {
@Override
public void handleDeployment(final DeploymentInfo depInfo, final ServletContext servletContext) {
depInfo.addInitialHandlerChainWrapper(new HandlerWrapper() {
@Override
public HttpHandler wrap(HttpHandler httphandler) {
final ResourceHandler freeResourceHandler = new ResourceHandler().setResourceManager(depInfo.getResourceManager());
io.undertow.predicate.Predicate predicato = Predicates.suffixes(".css",".js");
PathHandler pathHandler = Handlers.path(httphandler);
pathHandler.addPrefixPath("/api/country", new SecurityHandler(httphandler));
PredicateHandler myHandler = new PredicateHandler(predicato, freeResourceHandler, pathHandler);
return myHandler;
}
});
}
}
В коде, если я запрашиваю *.css
или *.js
, даже если я помещаю его в ограничение безопасности, проверка безопасности не выполняется, поэтому процесс выполняется быстрее.
Но теперь мне нужно добавить обработчик для освобождения веб-службы, поэтому мне нужно только пропустить проверку безопасности и go непосредственно в EJB, который предоставляет службу (например, CountryEJB).
Возможно ли это? Как мне достичь этого результата?
Необходимость: Я хочу какой-нибудь веб-сервис для незарегистрированных пользователей. Они необходимы для создания html форм и всплывающих окон (например, для выбора страны). Я не могу использовать web. xml в WAR, потому что он используется несколькими EAR и у них нет одинаковых политик.
Я не хочу просить keycloak для не заблокированные ресурсы.