これはStrict Method Invocationであり、Struts 2.5 以降ではデフォルトで有効になっています。
SMI とワイルドカード マッピングに関するドキュメントから:
アクションの定義でワイルドカード マッピングを使用すると、SMI は次の 2 つの方法で動作します。
- SMI は無効です。ワイルドカードはデフォルトの RegEx に置き換えられます。つまり、:
<action name="Person*" method="perform*">
は に変換されallowedMethod = "regex:perform([A-Za-z0-9_$]*)"
ます。
<allowed-method/>
SMI が有効です - ワイルドカード置換は行われません。注釈またはタグによってアクセスできるメソッドを厳密に定義する必要があります。
ごとに無効にすることができます<package>
。
<package strict-method-invocation="false">
<allowed-methods>
または、タグを使用してアクションごとに許可されたメソッド名を追加できます。
<action name="*Application" class="x.ApplicationHandler" method="{1}">
<result name="input">/WEB-INF/application.jsp</result>
<result name="success" type="redirectAction">
<param name="actionName">browseApps</param>
</result>
<allowed-methods>firstMethod, secondMethod, thirdMethod</allowed-methods>
</action>
<global-allowed-methods>
または、タグを使用してパッケージごとに許可されたメソッド名を追加します。
<package extends="struts-default">
<global-allowed-methods>firstMethod, secondMethod, thirdMethod</global-allowed-methods>
</package>
注意struts.xml で上記のタグを使用するには、DTD 定義を に更新する必要があります2.5
。
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE struts PUBLIC
"-//Apache Software Foundation//DTD Struts Configuration 2.5//EN"
"http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
...
</struts>
struts2-convention-pluginには、アクションが許可されたアクション メソッドを指定できるようにする@AllowedMethods
アノテーションもあります。
package-info.java
この注釈は、すべてのサブパッケージに対してグローバルに許可されたメソッドを指定するために、Action クラスまたはクラスで直接使用できます。