カスタム注釈+インターセプタープロジェクトコードの最適化

カスタム利点注釈+インターセプター

操作やインタフェースのニーズの権利または同様のユーザーインタフェース需要を制限することに、すべてではありません。あなたは、フィルタやインターセプタを使用することができますが、これは、構成ファイルまたは使用ワイルドカード内のすべてのメソッドで結合されなければなりません。
達成するために、カスタム注釈を加えた春のインターセプタを使用した:比較的簡単で柔軟な方法を使用することが可能です。

サンプルを書きます

たとえば、私たちは今、ちょうどこのように、あなたがコメントを追加することができ、制限カウンタのインタフェースになりたいです。seconds秒、最大容量MAXCOUNTあたりとして定義されます。

@AccessLimit(seconds=5, maxCount=5)
@RequestMapping(value="/path", method=RequestMethod.GET)
@ResponseBody
public Result<String> getMiaoshaPath(...) {
    // 业务逻辑代码
}

次のように注意が定義されています。

@Retention(RUNTIME)
@Target(METHOD)
public @interface AccessLimit {
    int seconds();
    int maxCount();
}

インターセプタで注釈を有効に使用しています。

@Service
public class AccessInterceptor  extends HandlerInterceptorAdapter{

    @Autowired
    RedisService redisService;

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)
            throws Exception {
        if(handler instanceof HandlerMethod) {
            MiaoshaUser user = getUser(request, response);
            UserContext.setUser(user);
            HandlerMethod hm = (HandlerMethod)handler;
            AccessLimit accessLimit = hm.getMethodAnnotation(AccessLimit.class);
            if(accessLimit == null) {
                return true;
            }
            int seconds = accessLimit.seconds();
            int maxCount = accessLimit.maxCount();
            String key = request.getRequestURI();
            Integer count = redisService.get(key);
            if(count  == null) {
                // 定义一个seconds有效期的key
                redisService.set(key, 1, seconds);
            }else if(count < maxCount) {
                redisService.incr(key);
            }else {
                return false;
            }
        }
        return true;
    }
}

最後に、私の経験は限られたレベルに制限され、読者は歓迎貴重な提案や意見のテキストのコメントがあります。あなたはより多くのリソースを取得したり、一緒に多くの技術の愛好家の交流を勉強したいしたい場合は、私は公共の数に焦点を当てることができ、「自然食品エンジニアXiaohui、」背景キーワードは、フロントとバックエンド技術交換基に、学習教材を受け取り、プログラマ返信副業グループ。為替で735 764 906:プログラマは、グループ副業Qグループに参加することができます。

ヘック、私の場合はカードが失われました。 「自然食品エンジニアXiaohui、」私はまだ見つけることができるため、マイクロ文字の検索

おすすめ

転載: www.cnblogs.com/mseddl/p/11582194.html