2016-06-07 13 views
-1

i wie unten eine Webservice erstellen zu implementieren:Ist es der richtige Weg Frühling Sicherheit & CXF webservice

web.xml

<display-name>MyService</display-name> 

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/beans.xml,/WEB-INF/spring-security.xml</param-value> 
</context-param> 

<listener> 
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> 
</listener> 

<servlet> 
    <servlet-name>CXFServlet</servlet-name> 
    <servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>CXFServlet</servlet-name> 
    <url-pattern>/rest/*</url-pattern> 
</servlet-mapping> 

<!-- Spring Security Filter --> 
<filter> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class> 
</filter> 

<filter-mapping> 
    <filter-name>springSecurityFilterChain</filter-name> 
    <url-pattern>/*</url-pattern> 
</filter-mapping> 

beans.xml

<import resource="classpath:META-INF/cxf/cxf.xml" /> 
<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> 

<context:component-scan base-package="com.*" /> 

<jaxrs:server id="employeeService" address="/employeeservices"> 
    <jaxrs:providers> 
     <bean class="org.codehaus.jackson.jaxrs.JacksonJsonProvider" /> 
    </jaxrs:providers> 
    <jaxrs:serviceBeans> 
     <ref bean="empService" /> 
    </jaxrs:serviceBeans> 
    <jaxrs:extensionMappings> 
     <entry key="xml" value="application/xml" /> 
     <entry key="json" value="application/json" /> 
    </jaxrs:extensionMappings> 
</jaxrs:server> 

<bean id="empService" class="com.service.impl.EmployeeServiceImpl"/> 
<bean id="employeeDao" class="com.dao.EmployeeDao"/> 

feder Sicherheit. xml

<http auto-config="true" use-expressions="true" create-session="stateless" > 
    <csrf disabled="true"/> 
    <http-basic entry-point-ref="restAuthenticationEntryPoint"></http-basic> 
    <intercept-url pattern="/**" access="hasRole('ROLE_USER')" /> 
</http> 

<beans:bean id="userAuthorService" class="com.auth.UserAuthorService"/> 
<beans:bean id="restAuthenticationEntryPoint" class="com.auth.UserBasicAuthenticationEntryPoint"> 
    <beans:property name="realmName" value="Name Of Your Realm"/> 
</beans:bean> 

<authentication-manager> 
    <authentication-provider user-service-ref="userAuthorService"> 
     <password-encoder ref="bcryptPasswordEncoder"/> 
    </authentication-provider> 
</authentication-manager> 

<beans:bean id="bcryptPasswordEncoder" 
    class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"> 
    <beans:constructor-arg name="strength" value="5" /> 
</beans:bean> 
<beans:bean id="loggerListener" class="org.springframework.security.authentication.event.LoggerListener"/> 
  1. Durch diese Konfiguration, ist es der Ablauf des Anfrageprozesses? : Anfrage -> Spring Sicherheit (Authentifizierung überprüfen) -> CXF -> Antwort.

  2. Gibt es Probleme in dieser Konfiguration, wenn ich es im echten Server bereitstellen? Wie sieht die Standardkonfiguration bei Verwendung von CXF und Feder aus?

  3. wenn ich rufe rechts uri: http://localhost:8089/MyService/rest/employeeservices/getemployeedetals?employeeId=004. Es ist in Ordnung. Aber rufen Sie falsches uri: http://localhost:8089/MyService/rest/employeeservices/getemployeedetallll?employeeId=004. Es throw Ausnahme:

ACHTUNG: Kein Betrieb passenden Anforderungspfad "/ MyService/rest/employeeservices/getemployeedetallll" gefunden wird, Relative Pfad:/getemployeedetal, HTTP-Methode: GET, Contenttype: /, Akzeptieren: /,. Bitte aktivieren Sie FINE/TRACE Loglevel für weitere Details. 7. Juni 2016 13.55.17 org.apache.cxf.jaxrs.impl.WebApplicationExceptionMapper toResponse

WARNUNG: javax.ws.rs.ClientErrorException bei org.apache.cxf.jaxrs.utils.SpecExceptions. toHttpException (SpecExceptions.java:110) bei org.apache.cxf.jaxrs.utils.ExceptionUtils.toHttpException (ExceptionUtils.java:149) bei org.apache.cxf.jaxrs.utils.JAXRSUtils.findTargetMethod (JAXRSUtils.java: 477)

Also wie kann ich die richtige uri vor Zugriff Controller Klasse filtern.

Bitte helfen Sie mir. Vielen Dank.

Antwort

0

Durch diese Konfiguration ist es Fluss der Anfrage Prozess? : Anfrage -> Spring Sicherheit (überprüfen Sie die Authentifizierung) -> CXF -> Antwort.

Ja, weil J2EE Filter um J2EE-Servlets ausgeführt werden (vor und nach euqeust), so springSecurityFilterChain wird vor CXFServlet ausgeführt werden

Gibt es Probleme in dieser Konfiguration, wenn ich es in die bereitstellen echter Server?

Dies ist nicht notwendig mit latests Versionen von CXF

<import resource="classpath:META-INF/cxf/cxf-servlet.xml"/> 

Auch fangen Sie in CXFServlet /rest/* aber in Auth *.Ist das ein Problem? Benötigen Sie Restdienste ohne Authentifizierung? Es ist schwierig, Probleme zu analysieren, wenn wir den Kontext Ihres Systems nicht kennen. Genaue Informationen über Ihre Zweifel und ich könnte versuchen, zu helfen

Was ist die Standardkonfiguration bei Verwendung von CXF und Feder?

Es gibt keine jede empfohlene Konfiguration, weil CXF mit Feder oder Standalone, JAX-WS oder JAX-RS-verwendet werden, als Server oder handeln als Client mit Authentifizierung über Feder Sicherheit ausgeführt oder integriert mit RequestContextFilter oder inInterceptor im jax-rs-Server oder sogar auf globaler Ebene im CXF-Bus.

Wenn Sie über die notwendigen Module zu konfigurieren, so dass CXF mit Feder ausgeführt wurde, haben Sie die erforderlichen.

Für die Authentifizierung könnten Sie ein JWT-Token anstelle eines bcrypt-Passwords verwenden.

wenn ich rechts rufe uri: http://localhost:8089/MyService/rest/employeeservices/getemployeedetals?employeeId=004. ist in Ordnung. Aber rufen Sie falsches uri: http://localhost:8089/MyService/rest/employeeservices/getemployeedetallll?employeeId=004. Es throw Ausnahme: ACHTUNG: Kein Betrieb Anpassungsanforderungspfad

Diese Warnung ist normal. Der Server antwortet mit einem HTTP-Fehlercode 404-Not gefunden, weil es keine Ressource rest/employeeservices/getemployeedetallll

So verfügbar ist, wie kann ich, bevor der Zugriff Controller-Klasse das Recht uri filtern.

CXF macht für Sie, indem Sie einen 404 zurückgeben, wenn der Pfad nicht gefunden wird. Es ist das richtige Verhalten. Meinst du CXF-Uri-Filter vor Federsicherung ausgeführt werden? Mit dieser Konfiguration können Sie nicht, da der Authentifizierungsfilter vorher ist.

+0

Danke pedrofb, es macht mich klar – KienNguyen

Verwandte Themen