に制限: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")
のように設定できますか?それはあなたがコンテンツネゴシエーションのために使用されているコンテンツタイプ(または任意の他の方法(複数可)に基づいて見ることができるページを制限するために春のセキュリティを使用することです行うには
- JSPビューに
/create.json
を表示することで正常に動作します。それを最善の方法で少し拡大できますか? – Rich