TA的每日心情 | 衰 2021-2-2 11:21 |
---|
签到天数: 36 天 [LV.5]常住居民I
|
大家都知道springMvc 都有注解配置 实现请求方式比如:6 P: ]9 z2 C3 k' v6 N
@RequestMapping(value = "/index", method = RequestMethod.GET)$ @7 u; O# l8 F" C, [) q) x( z
这样的话 用户只能发送get请求。
0 u5 p# p) F! b( M; X但是struts2 大多是基于配置实现的、注解的方式用的很少、下面通过struts2实现Http只允许POST请求。
0 Z/ I5 `" W# v
8 `# y9 u0 B: _; q$ u6 |' \注解 RequestTypeAnnotation:- @Target({ElementType.PARAMETER, ElementType.METHOD})
0 l0 X. t. b4 |8 D$ G4 Y - @Retention(RetentionPolicy.RUNTIME)
; d' L) V8 y4 Q& d4 v - @Documented 6 e: a, r: d) g: S4 q
- public @interface RequestTypeAnnotation {; O7 j U2 r* K
- RequestType value();
- C$ H1 w7 e1 L - public enum RequestType {
2 x5 f7 `2 c8 ^) X% g' X/ E - /**! b/ g5 Z, i2 E' [+ {% z5 q! D
- * post方式的http请求
2 f8 x9 e' e" n% ]2 L% Z2 A6 A/ f - */2 M+ m3 ^, O7 W4 x! v
- POST,0 |, M: I+ r) r3 A: r
- /** V- C' G+ K0 R7 I& \
- * get方式的http请求
6 a* m7 ]% P% f- B - */) T* M# W( Q) k6 h
- GET
! L- z- o# ~6 e: J- A2 F - }
7 V8 ~2 y+ a% M1 r E, K - }
复制代码 拦截器 RequestTypeInterceptor:- /**6 n3 H# q% f' ]3 }3 a& Y
- * 拦截器: M) f/ \* Q$ O0 h$ [
- * 创建者 张志朋
0 L2 B8 j' v. b$ w2 k- S5 O2 e - * 创建时间 2016年1月5日
8 C) h4 ^& D p: h+ r3 f - *( H6 U. [2 ~6 Y3 R" ]5 E
- */
2 r! g" X" G! s - public class RequestTypeInterceptor extends AbstractInterceptor {; f9 A( }- ~2 B" c! q% y
- private static final long serialVersionUID = -4204585527913002611L;
4 \. F& T# r9 [% q - ( c) g! x ^; Q O/ _0 q% A0 X
- public String intercept(ActionInvocation invocation) throws Exception {, O/ [0 e0 _+ b/ F5 v& _- V
- 3 a# a9 V. y1 i& i* o3 }
- Action action = (Action) invocation.getAction();1 g1 d6 }/ s' s `* Q- F1 f# c
- try {9 x7 [% p* _/ P7 O
- Method method = action.getClass().getMethod(invocation.getProxy().getMethod(), new Class[] {});
5 F' j- r: C1 k! m- K - Annotation[] annotations = method.getAnnotations();) K- |4 C+ Y$ r0 J# j: x
- String methodName = ServletActionContext.getRequest().getMethod();
" X& P1 O# P1 \6 p# Y - for (Annotation annotation : annotations) {7 v8 V2 u2 L4 {/ a$ w5 O4 C% h
- if (annotation instanceof RequestTypeAnnotation) {6 |. {/ m& O6 i. [: d, k
- RequestTypeAnnotation reqTypeAnnotation = (RequestTypeAnnotation) annotation;
, B9 X! G/ e2 k* M Q - if (!reqTypeAnnotation.value().name().equalsIgnoreCase(methodName)) {. y3 H K' c6 \( _( ^
- return "input";/ Q) g, d" O. \8 l( A1 ^6 n
- }* F6 b: V# Q5 P8 ^
- }
$ U+ i6 O: g5 a% {' c( j/ z - }2 G1 a. @$ U! t+ X) n
- } catch (Exception e) {
( q% H* `, y4 h6 s3 E. P - return "error";* W w( U0 o0 \/ E# B# A: L
- } x( i) B' s9 o. {- |0 a
- return invocation.invoke();
, }" z. e( t( X0 e" c: I2 P - }6 ]9 }. _! q, q: h9 k/ u( x. z9 P
- }
复制代码 请求 WelcomeAction:, w9 i4 l5 X" Y, G
- /** X3 p9 y1 c/ `+ t/ y
- * 测试action
1 ~$ F, V5 W5 m, }) r+ d, x6 Q - * 创建者 张志朋& |# E1 T1 m5 }( r" B
- * 创建时间 2016年1月5日, a# t6 j: O3 a7 H. y
- *
9 {, F0 K3 P0 c+ a2 W4 G9 H. m - */+ w, L; i# l/ b
- public class WelcomeAction extends ActionSupport { ?$ b3 J" B, A6 K$ }' l5 r
- private static final long serialVersionUID = 752609025281512627L;5 v1 x' i9 F( G3 |4 s3 c
- private String message;8 W7 v1 k2 J6 z+ ^8 u) r2 J
- @RequestTypeAnnotation(RequestType.POST)
' A9 w. J8 `# F8 k - public String execute(){6 t) L: N) @, o/ c q1 F9 ]
- message = "只接受post请求";- h1 R/ j8 u: P: |3 {
- return SUCCESS;
" m1 S+ _9 X% ^; f - }
! d. R, `0 ~' d$ e - /**, [( d( n* t% O; v0 N
- * @return the message7 f9 g; k( \8 n" n V
- */
% E+ h4 Q& L& K' r - public String getMessage() {1 y3 J3 b8 K) Z
- return message;% P3 }& J( B$ ^' }- A" t, @
- }; h+ T8 D1 o! u# Y" ^1 \
- /**; ] x6 c6 {8 w
- * @param message the message to set
# N8 B8 ~+ ^% c6 D0 @1 M" w7 [ - */3 ~' l1 \- t, N# S# \- q
- public void setMessage(String message) {
; q3 K. v7 V" P a z - this.message = message;/ X) v3 g4 w: |. A0 t2 R: Q2 }
- }
2 ?6 A! h" u# Q5 [$ ], N6 h - }
复制代码 9 o1 R! O; f, f& v4 u; v" L
struts.xml配置:- <struts>' \+ P9 n8 l7 R. }! Y8 T0 r
- <constant name="struts.devMode" value="false" />
/ L7 [- B1 }6 T* y8 e( F - <constant name="struts.i18n.encoding" value="UTF-8" />
8 y3 z3 p0 [) }! _ p - <constant name="struts.action.extension" value="action"></constant># ^# T* H& }. j
- <package name="web01" extends="json-default">
/ W' K% t+ A/ S5 g+ L - <interceptors>
9 t. B9 Q H# C( ] - <interceptor name="requestType" class="itstyle.interceptor.RequestTypeInterceptor"></interceptor> ; p C2 D+ l( J2 J
- </interceptors>% Z+ h, X( ^- R) {$ h' _/ D6 N2 [
- <action name="welcome" class="itstyle.action.WelcomeAction">+ B- w! v* T( A- w* z* H6 G0 z
- <result name="success" type="json">
8 @: }) g) P9 n - <param name="root">message</param>9 _! W/ ?% {4 G! a: i" }
- </result>
& u$ w* ?5 z1 c. }* D9 z, G/ L9 F" ` - <result name="input">/error.jsp</result>- N0 m( d% F T8 E
- <interceptor-ref name="defaultStack"></interceptor-ref> ) U: p% z) H8 g& G$ s& ]
- <interceptor-ref name="requestType"></interceptor-ref>
6 M% \8 K- F) { k& e7 g - </action>
' I9 V) z1 m; q6 U; h' O - </package>8 W/ H) U7 D$ @ U/ r% a
- </struts>
复制代码 * J- O+ r5 t4 g# w: y& n) ]2 G
项目源码下载地址: 注解实现struts2 action 只接受post请求
2 m+ v9 A) O+ J9 v4 w4 H. `$ {5 X7 m X/ f
提取码:
6 W# Q* h+ R+ ] x0 j
9 a2 B' P0 d8 e& ~5 H% i# G% y
& D8 z" m6 E0 G7 _ |
|