2012-01-06 10 views
2

に制限:Spring MVCの3コンテンツネゴシエーション次のように私は私のSpring 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

- JSPビューに /create.jsonを表示することで正常に動作します。それを最善の方法で少し拡大できますか? – 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

関連する問題