2012-01-06 2 views
2

이를 지원하는 활동에 제한이 매우 잘 작동스프링 MVC 3의 콘텐츠 협상이 내 스프링 MVC 3 응용 프로그램에서 내용 협상을 구성한

 <bean 
      class="org.springframework.web.servlet.view.ContentNegotiatingViewResolver"> 
      <property name="order" value="0" /> 
      <property name="favorPathExtension" value="true" /> 
      <property name="defaultContentType"> 
        <ref bean="htmlMediaType" /> 
      </property> 
      <property name="mediaTypes"> 
        <map> 
          <entry key="json" value="application/json" /> 
          <entry key="xml" value="application/xml" /> 
        </map> 
      </property> 
      <property name="defaultViews"> 
        <list> 
          <bean 
            class="org.springframework.web.servlet.view.json.MappingJacksonJsonView"> 
            <property name="objectMapper" ref="jacksonObjectMapper" /> 
          </bean> 
          <bean class="org.springframework.web.servlet.view.xml.MarshallingView"> 
            <property name="marshaller"> 
              <bean class="org.springframework.oxm.castor.CastorMarshaller" /> 
            </property> 
          </bean> 
        </list> 
      </property> 
      <property name="viewResolvers"> 
        <ref bean="tilesViewResolver" /> 
      </property> 
    </bean> 

- 내 모든 뷰와 HTML보기로 렌더링 '일반'뷰 템플릿 또는 'Accept'헤더에 따라 뷰 모델 데이터의 JSON 또는 XML 덤프로 가져올 수 있습니다.

그러나 이것은 약간의 보안 허점 인 것 같습니다. 내 행동 중 일부는 API 스타일 액션이며 HTML 또는 JSON 또는 XML로 합법적으로 사용할 수 있습니다. 그러나 일부보기는 HTML 전용으로 제공됩니다. 나는 최종 사용자가 URL에 ".json"을 추가하는 것만으로 모든보기 데이터를 볼 수 있기를 정말로 원하지 않습니다.

Spring MVC에서 컨텐츠 협상을 수행 할 수있는 방법이 있습니까? 명시 적으로 동의 한 작업에만 해당합니까? @RespondsTo("xml", "json")과 같은 컨트롤러 특수 효과를 설정할 수 있습니까? 당신이 내용 협상에 사용하는 콘텐츠 형식 (또는 어떤 다른 방법 (들)을 기반으로 볼 수있는 페이지 제한하는 봄 보안을 사용하는 것입니다 할

답변

0

한 가지 방법.

+0

일 수도 - /create.json JSP보기를 표시하여 잘 작동합니다. 최선을 다하는 방법을 좀 더 넓힐 수 있습니까? – Rich

1

왜 돈 ' DelegatingFilterProxy를 통해 필터를 사용하여 사용자가 불필요한 콘텐츠 형식에 액세스하지 못하도록 차단

1

같은 문제가 발생했습니다. produces@RequestMapping의 속성이 유용합니다. 옵트 인 대신에 아웃을 사용하지만 나는 당신을 기쁘게 할 수있는 것이라고 생각합니다.

@Controller 
@RequestMapping("/categories") 
public class CategoriesController 
{ 
    @RequestMapping(value = "/create", method = RequestMethod.GET, produces = "application/xhtml+xml") 
    public String createForm(Model model) 
    { 
    } 
} 

/create는 - 406 오류

+0

모든 보안 취약점을 블랙리스트하려고하면 안전한 옵션을 명시 적으로 허용하는 것보다 항상 나빠집니다. 그러나 아무것도 아닌 것보다 낫습니다 .-) – Rich