Syslogログシステム-インタフェースの設計


データインタフェースの返信メッセージ
{
  "code": 0,
  "count": 0,
  "data": {},
  "msg": "string"
}

データインタフェース呼び出しは常に上記のメッセージ形式JSONデータを返し、ここでのフィールド設計はlayuiのデータテーブル取数インタフェースを互換化するためである.
コードフィールド
インタフェースが正常に返された場合は0、呼び出しエラーが発生した場合は0ではありません.
msgフィールド
インタフェース呼び出しのメッセージ情報は,呼び出しエラーが発生した場合にエラー記述情報であり,直感的で友好的な情報をユーザに直接表示できることを提案する.
dataフィールド
インタフェース呼び出しが返すビジネスデータ
countフィールド
データのページングで使用する、データの合計行数、layuiデータテーブルコンポーネントに必要なフィールド
ログインインタフェースの例
ログイン成功
{
  "code": 0,
  "msg": "",
  "data": {
    "password": "e10adc3949ba59abbe56e057f20f883e",
    "user": "admin",
    "token": "3b9ce276b01c46d3be5ffc75698782d2"
  },
  "count": 0
}

ログイン失敗
{
  "msg": "    !",
  "code": -1
}

データインタフェースのトークンtokenメカニズム
ログインインタフェースを呼び出し、ログインに成功した後、トークンtokenを返し、その後、トークンをパラメータとして後続のインタフェースをさらに呼び出します.tokenパラメータは、getリクエストとの競合を回避するために@RequestHeader転送を推奨します.セキュリティ・レベルに応じてインタフェースを2つに分類できます.トークンtokenは不要です.トークンtokenは必要ありません.
ログインインタフェースサンプルコード
    @ApiOperation(value = "  ")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "user", value = "   ", dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "password", value = "  ", dataType = "String", paramType = "query")
    })
    @RequestMapping(path = "/sys/login", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
    @IgnoreToken
    public ResponseData login(@RequestParam String user, @RequestParam String password) {

        Map<String, Object> map = sysService.login(user, password);

        return ResponseData.success(map);
    }

トークンtokenが必要なインタフェースのサンプルコード
    @ApiOperation(value = "    ")
    @ApiImplicitParams({
            @ApiImplicitParam(name = "token", value = "  ", dataType = "String", paramType = "header"),
            @ApiImplicitParam(name = "userName", value = "   ", dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "password", value = "  ", dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "fullName", value = "  ", dataType = "String", paramType = "query"),
            @ApiImplicitParam(name = "remark", value = "  ", dataType = "String", paramType = "query")
    })
    @RequestMapping(path = "/sys/addUser", method = RequestMethod.GET, produces = "application/json;charset=UTF-8")
    public ResponseData addUser(@RequestHeader String token, @RequestParam String userName, @RequestParam String password, @RequestParam(required = false) String fullName, @RequestParam(required = false) String remark){

        throw new SysException("     !");
    }

@IgnoreTokenとSpringのAOPメカニズム
@IgnoreTokenタグインタフェースでトークンを検証する必要があるかどうか、Springフレームワークで共通の接面を定義し、権限の統一検証を簡単に実現します.@IgnoreRuleタグインタフェースは、インタフェース権限をさらに検証する必要があるかどうか.
    @Before("execution(* syslog.controller.*.*(..)) && !@annotation(syslog.IgnoreToken)")
    public void checkToken(JoinPoint jp) throws Throwable {
        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
        HttpServletRequest request = attributes.getRequest();
        String token = request.getHeader("token");
        //    
        SessionUtil.checkSession(token);

       //         
        MethodInvocationProceedingJoinPoint methodPoint = (MethodInvocationProceedingJoinPoint)jp;
        Field field = methodPoint.getClass().getDeclaredField("methodInvocation");
        field.setAccessible(true);
        ReflectiveMethodInvocation invocation = (ReflectiveMethodInvocation) field.get(methodPoint);
        Method method = invocation.getMethod();

        //      
        IgnoreRule ignoreRule = method.getDeclaredAnnotation(IgnoreRule.class);
        if (ignoreRule != null)
            return;
        String className = jp.getTarget().getClass().getName();
        String methodName = method.getName();
        String ruleName = className + "." + methodName;
        sysService.checkRule(token, ruleName);
    }