Включите безопасность JAX-RS 2.0 с Wildfly Realm

Я пытаюсь защитить свой веб-сервис RESTFul, но мне это не удается.

Несмотря на то, что я создал подкласс web.xml, Application и разместил аннотации, я все еще могу получить доступ к веб-сервису без аутентификации.

Ребята, вы хоть представляете, что я делаю не так?

Я использую следующий стек: Resteasy 3.0.24 Wildfly 11

Вот мой код:

MDBService.java

@Path("")
@RequestScoped
@Consumes(MediaType.APPLICATION_XML)
@Produces(MediaType.APPLICATION_XML)
public class MDBService {

public MDBService() {
}

@PUT
@Path("callEPFC")
@DenyAll
public Response callEPFC(String prices) {
    return Response.status(200).entity(null).build();
}
}

MDBApplication.java

@ApplicationPath("/EPFC")
public class MDBApplication extends Application {
@Override
public Set<Class<?>> getClasses() {
    Set<Class<?>> resources = new HashSet<>();
    resources.add(MDBService.class);
    return resources;
}
}

веб.xml

<web-app version="3.0" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd">
<context-param>
    <param-name>resteasy.role.based.security</param-name>
    <param-value>true</param-value>
</context-param>

<listener>
    <listener-class>org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap</listener-class>
</listener>

<servlet>
    <servlet-name>Resteasy</servlet-name>
    <servlet-class>org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher</servlet-class>
    <init-param>
        <param-name>javax.ws.rs.Application</param-name>
        <param-value>de.wingas.pfc.input.MDBApplication</param-value>
    </init-param>
</servlet>

<servlet-mapping>
    <servlet-name>Resteasy</servlet-name>
    <url-pattern>/*</url-pattern>

</servlet-mapping>

<security-constraint>
    <web-resource-collection>
        <web-resource-name>Resteasy</web-resource-name>
        <url-pattern>/EPFC</url-pattern>
    </web-resource-collection>
    <auth-constraint>
        <role-name>matlab_epfc</role-name>
    </auth-constraint>
</security-constraint>

<login-config>
    <auth-method>BASIC</auth-method>
    <realm-name>ApplicationRealm</realm-name>
</login-config>

<security-role>
    <role-name>matlab_epfc</role-name>
</security-role>
</web-app>

build.gradle

apply plugin: 'war'
version=''
sourceCompatibility = 1.8
targetCompatibility = 1.8
dependencies {
providedCompile group: 'javax', name: 'javaee-api', version: '7.0'

providedCompile group: 'org.jboss.resteasy', name: 'resteasy-servlet-initializer', version: '3.0.24.Final'
providedCompile group: 'org.jboss.resteasy', name: 'resteasy-multipart-provider', version: '3.0.24.Final'
providedCompile group: 'org.jboss.resteasy', name: 'resteasy-jaxrs', version: '3.0.24.Final'
providedCompile group: 'org.jboss.resteasy', name: 'resteasy-cdi', version: '3.0.24.Final'

}

person Lluc    schedule 16.11.2017    source источник


Ответы (1)


Ну, проблема была в том, что Gradle не копировал web.xml в войну. После добавления этого в файл сборки gradle все заработало.

war {
   webXml = file('src/main/webapp/WEB-INF/web.xml')
   webInf { from file('src/main/webapp/WEB-INF/beans.xml')}
}
person Lluc    schedule 01.12.2017