2016-06-10 7 views
2

So habe ich versucht, einige Daten zu Web-Service mit Spring-Integration eingehenden Gateway zu posten. GET-Methode funktioniert einfach. Also habe ich versucht, POST zu benutzen, ich gebe einen String weiter. Und versuche auch, einen einfachen String zu bekommen. Sie können den TestService überprüfen. Aber jedes Mal, wenn ich versuche, den Testfall zu starten, erhalte ich 403 Fehler. Ich habe Spring Security und jeden anderen Aspekt überprüft, aber ich konnte mich nicht darum kümmern. Ich habe ungefähr 2 Tage gegoogelt, aber keine Ahnung davon.403 mit POST-Methode des eingehenden Gateways erhalten - Spring-Integration

Sie können auf THIS Link schauen, um zu sehen, dass meine anderen Funktionen, die GET-Methoden sind und gut funktionieren. Ich habe dieses Problem nur mit POST! Also bitte hilf mir herauszufinden, was mit meinem Code nicht stimmt!

Mein integration.xml ist:

<?xml version="1.0" encoding="UTF-8"?> 
<beans xmlns="http://www.springframework.org/schema/beans" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd 
    http://www.springframework.org/schema/integration http://www.springframework.org/schema/integration/spring-integration.xsd 
    http://www.springframework.org/schema/integration/http http://www.springframework.org/schema/integration/http/spring-integration-http.xsd 
    http://www.springframework.org/schema/oxm http://www.springframework.org/schema/oxm/spring-oxm.xsd" 
xmlns:int="http://www.springframework.org/schema/integration" 
xmlns:oxm="http://www.springframework.org/schema/oxm" 
xmlns:int-http="http://www.springframework.org/schema/integration/http"> 

<int:annotation-config/> 

<bean class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
    <property name="order" value="1" /> 
    <property name="contentNegotiationManager"> 
     <bean class="org.springframework.web.accept.ContentNegotiationManagerFactoryBean"> 
      <property name="defaultContentType" value="application/json"/> 
      <property name="favorParameter" value="true"/> 
      <property name="ignoreAcceptHeader" value="true" /> 
      <property name="mediaTypes"> 
       <map> 
        <entry key="json" value="application/json" /> 
        <entry key="xml" value="application/xml" /> 
       </map> 
      </property> 
     </bean> 
    </property> 
    <property name="defaultViews"> 
     <list> 
      <bean 
       class="org.springframework.integration.samples.rest.json.view.ExtendedMappingJacksonJsonView" > 
       <property name="objectMapper" ref="jaxbJacksonObjectMapper"/> 
      </bean> 
      <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
       <constructor-arg ref="marshaller"/> 
      </bean> 
     </list> 
    </property> 
</bean> 

<int:channel id="orderRequestChannel" /> 
<int:channel id="orderResponseChannel" /> 

<int-http:inbound-gateway id="inboundOrderRequestGateway" 
    supported-methods="POST" 
    request-channel="orderRequestChannel" 
    reply-channel="orderResponseChannel" 
    view-name="/order" 
    path="/order/view" 
    request-payload-type="java.lang.String" 
    reply-timeout="50000"> 
</int-http:inbound-gateway> 

<int:service-activator id="orderGatewayActivator" 
       input-channel="orderRequestChannel" 
       output-channel="orderResponseChannel" 
       ref="testService" 
       method="createOrder" 
       requires-reply="true" 
       send-timeout="60000" /> 
<oxm:jaxb2-marshaller id="marshaller" context-path="org.springframework.integration.samples.rest.domain" /> 
<bean id="jaxbJacksonObjectMapper" class="org.springframework.integration.samples.rest.json.JaxbJacksonObjectMapper"/> 

Test Service-Methode ist:

@Service("testService") 
public class TestService { 

    public Message<String> createOrder(Message<String> orderRequest) { 
    System.out.println("Inside!!!!!!!!!!"); 
    return MessageBuilder.withPayload("Some Response!").build(); 
    } 
} 

Spring Security File:

<?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:security="http://www.springframework.org/schema/security" 
xsi:schemaLocation=" 
     http://www.springframework.org/schema/beans 
     http://www.springframework.org/schema/beans/spring-beans.xsd 
     http://www.springframework.org/schema/security 
     http://www.springframework.org/schema/security/spring-security.xsd"> 

<security:global-method-security 
    secured-annotations="enabled" /> 

<!-- Configure Spring Security --> 
<security:http auto-config="true" use-expressions="true" realm="REST HTTP Web Service" create-session="never"> 
    <security:http-basic /> 
    <security:intercept-url pattern='/services/employee/*' access="hasRole('ROLE_REST_HTTP_USER')" /> 
    <security:intercept-url pattern='/order/*' access="permitAll" /> 
    <security:csrf disabled="true" /> 
</security:http> 

<!-- In this example, we are using in memory authentication. The password encoder depends on 
       Jasypt's String Digester to digest the password stored in users.properties --> 
<security:authentication-manager alias="authenticationManager"> 
    <security:authentication-provider> 
     <security:password-encoder ref="passwordEncoder"/> 
     <security:user-service properties="classpath:users.properties" /> 
    </security:authentication-provider> 
</security:authentication-manager> 

<!-- 
    Use the StringDigester to create uni-directional password encryption. 
    All uni-directional encryption methods supported in jasypt is integrated into 
    Spring Security 
--> 
<bean id="jasyptStringDigester" class="org.jasypt.digest.StandardStringDigester" > 
    <property name="algorithm" value="SHA-1" /> 
    <property name="iterations" value="100000" /> 
    <property name="saltGenerator"> 
     <bean id="zeroSaltGenerator" class="org.jasypt.salt.ZeroSaltGenerator"/> 
    </property> 
    <property name="saltSizeBytes" value="10"/> 
</bean> 

<!-- 
    This Spring Security-friendly PasswordEncoder implementation will 
     wrap the StringDigester instance so that it can be used from 
     the security framework. 
    --> 
<bean id="passwordEncoder" class="org.jasypt.spring.security3.PasswordEncoder"> 
    <property name="stringDigester" ref="jasyptStringDigester"/> 
</bean> 

Schließlich meine Testmethode:

@Test 
public void testPOST() throws Exception{ 
    final String fullUrl = "http://localhost:9080/rest-http/order/view"; 
    HttpHeaders headers = new HttpHeaders(); 
    HttpEntity<Object> request = new HttpEntity<Object>(headers); 
    ResponseEntity<?> httpResponse = restTemplate.exchange(fullUrl, HttpMethod.POST, request, String.class, "Request");  
    //restTemplate.getMessageConverters().add(jsonHttpMessageConverter); 
    if (!httpResponse.getStatusCode().equals(HttpStatus.OK)){ 
     logger.error("Problems with the request. Http status: " + httpResponse.getStatusCode()); 
    } 

} 

Bitte helfen Sie mir Jungen !! Danke im Voraus.

+0

Sie müssen DEBUG-Protokolle für 'org.springframework' Kategorie von der Serverseite teilen, wenn Sie Ihre' Post' getroffen und hol dir das "403 Forbidden". –

Antwort

0

Wenn Sie die Sicherheit von Spring verwenden, ist standardmäßig CSRF protection aktiviert und in der eingehenden Anfrage wird ein X-Csrf-Token erwartet.

Sie müssen dies deaktivieren, indem Sie Ihre Spring-XML-Sicherheitsdatei unten hinzufügen. Lesen Sie mehr über here Spring CSRF-Schutz und unter Code wird in Abschnitt 16.4.2 $ Konfigurieren CSRF-Schutz diskutiert

<http> 
    <!-- ... --> 
    <csrf disabled="true"/> 
</http> 
+0

Versucht es, aber immer noch den gleichen Fehler! – Rajkumar

+0

Können Sie teilen, wie Ihre aktualisierte Sicherheit XML sah .. – hagrawal

+1

Ich war so dumm und müde, ich schrieb einfach, was Sie in Ihrem Beitrag geschrieben, was bedeutet, dass ich csrf nicht deaktiviert. Sobald ich es wahr gemacht habe, hat es funktioniert. Danke für die Hilfe, Bruder! – Rajkumar