Spring mvcメソッド注記ブロック
3583 ワード
アプリケーションシーンは、apiインタフェースにaccessTokenを一意に示すユーザがいるなど、メソッドレベルで今回の呼び出しを認証し、accessTokenがあるリクエストごとにメソッドにブロッキングを追加し、今回のリクエストを取得したユーザをrequestまたはsessionドメインに格納することができる.
pythonでは、python flaskで以前に装飾器を使用してメソッドを前処理し、権限処理を行うことができます.
まず、@access_を使用するインスタンスを見てみましょう.requiredブロック:
実装は簡単です.
JAvaでは、注釈ブロックをカスタマイズして実装し、必要なブロック方法に注釈@AccessRequiredを追加します.
Spring mvc Controllerでの使用例
上記の例をどのように実現しますか?
注記を定義します.
ブロックを作る:
Spring mvcプロファイルでは、次の手順に従います.
注意:
を使用して静的リソースを構成している場合は、上記のようにブロックを構成するときにグローバルブロック/**を使用します.そうしないと、静的リソースをブロックしてResourceHttpRequestHandler cannot be cast to HandlerMethod例外を放出します.
方法1:ブロックパス接頭辞を付ける
方法2:カスタムブロッキングでinstanceofを使用してResourceHttpRequestHandlerタイプをフィルタする
大きな成果は、ブロッカーの中でやりたいことをすることができ、Controllerリクエストの方法をロードすることができます.
pythonでは、python flaskで以前に装飾器を使用してメソッドを前処理し、権限処理を行うことができます.
まず、@access_を使用するインスタンスを見てみましょう.requiredブロック:
@api.route('/post_apply')
@access_required
def apply():
"""
"""
print ' :'+g.user
return jsonify(response_data)
実装は簡単です.
# access_token g
def access_required(f):
@wraps(f)
def decorated_func(*args, **kwargs):
access_token = request.values.get('access_token')
if access_token == None:
return error_msg('500', 'access_token required')
if access_token == "":
return error_msg('500', 'access_token can not empty')
if is_access_token(access_token) == False:
return error_msg('500', 'invalid_access_token')
return f(*args, **kwargs)
return decorated_func
JAvaでは、注釈ブロックをカスタマイズして実装し、必要なブロック方法に注釈@AccessRequiredを追加します.
Spring mvc Controllerでの使用例
/**
*
* @return
*/
@RequestMapping(value="/urlinter",method=RequestMethod.GET)
@AccessRequired
public @ResponseBody String urlInterceptorTest() {
return " :user"+request.getAttribute("currUser");
}
上記の例をどのように実現しますか?
注記を定義します.
import java.lang.annotation.ElementType;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
public @interface AccessRequired {
}
ブロックを作る:
/**
* url access_token
* @author Nob
*
*/
public class UserAccessApiInterceptor extends HandlerInterceptorAdapter {
public boolean preHandle(HttpServletRequest request,
HttpServletResponse response, Object handler) throws Exception {
HandlerMethod handlerMethod = (HandlerMethod) handler;
Method method = handlerMethod.getMethod();
AccessRequired annotation = method.getAnnotation(AccessRequired.class);
if (annotation != null) {
System.out.println(" :@AccessRequired");
String accessToken = request.getParameter("access_token");
/**
* Do something
*/
response.getWriter().write(" ,accessToken :" + accessToken);
}
//
return true;
}
}
Spring mvcプロファイルでは、次の手順に従います.
<!-- -->
<mvc:interceptors>
<mvc:interceptor>
<!-- /** , :/myPath/* -->
<mvc:mapping path="/api/**" />
<ref bean="userAccessInterceptor" />
</mvc:interceptor>
</mvc:interceptors>
<bean id="userAccessInterceptor"
class="com.banmacoffee.web.interceptor.UserAccessApiInterceptor">
</bean>
注意:
方法1:ブロックパス接頭辞を付ける
<mvc:mapping path="/path/**" />
方法2:カスタムブロッキングでinstanceofを使用してResourceHttpRequestHandlerタイプをフィルタする
大きな成果は、ブロッカーの中でやりたいことをすることができ、Controllerリクエストの方法をロードすることができます.