项目思路---接口的权限控制、登陆校验以及白名单的设置

接口的权限控制、登陆校验以及白名单的设置

在登陆成功之后,才可以去访问一些接口,否则其他的接口都是不可以访问状态,或者校验这个用户在发起请求的时候,是否是登陆状态,同时有些接口不需要登陆也可以访问,在这里做一个简单的记录。

首先,在看到这些需求的时候,要在配置文件里面进行配置白名单,之后读取白名单的配置文件获取到白名单的列表,这样就可以拿到了那写接口不需要判断。

其次,要做一个拦截器,在每一次前台发起请求的时候,用来拦截,之后进行比较,如果是白名单接口,则不需要进行拦截,直接放掉,如果需要拦截,则进行拦截,进行业务判断。

在之后,根据业务逻辑,判断白名单,之后,判断登陆权限,在判断角色权限,最后抛出异常,返给前台,告知前台信息。

1、读取白名单,以及设置拦截器

2、根据业务进行处理。

    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {

        Map<String,String> map = CommonUtils.getIpAddr(request);
        if (restList.contains(map.get("uri"))) {
            logger.info(map.get("uri")+"是白名单");
            return true;
        }

        // 检查每个到来的请求对应的session域中是否有登录标识
        Object loginName = request.getSession().getAttribute("loginName");
        if (null == loginName || !(loginName instanceof String)) {
            // 未登录,重定向到登录页
            throw new YzptException(CodeEnums.USER_TOKEN_FAIL);
        }
        String userName = (String) loginName;
        System.out.println("当前用户已登录,登录的用户名为: " + userName);
        return true;
    }

用于处理请求资源的信息方法。 

    public static Map<String ,String> getIpAddr(HttpServletRequest request) {

        Map<String ,String> map = new HashMap<String,String>();

        String uri = request.getRequestURI();//返回请求行中的资源名称
        String url = request.getRequestURL().toString();//获得客户端发送请求的完整url
        String params = request.getQueryString();//返回请求行中的参数部分
        String host = request.getRemoteHost();//返回发出请求的客户机的主机名
        int port = request.getRemotePort();//返回发出请求的客户机的端口号。

        String ip = request.getHeader("X-Forwarded-For");
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("WL-Proxy-Client-IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_CLIENT_IP");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getHeader("HTTP_X_FORWARDED_FOR");
        }
        if (ip == null || ip.length() == 0 || "unknown".equalsIgnoreCase(ip)) {
            ip = request.getRemoteAddr();
        }
        map.put("host",host);
        map.put("params",params);
        map.put("url",url);
        map.put("uri",uri);
        map.put("port",String.valueOf(port));
        map.put("ip",ip);
        return map;
    }

总结:在做开始做项目的时候,需要将整体的流程想清楚,之后分解项目模块,在进行每一块的编写和处理,代码不是很全,之后接口权限的控制我还没有写,主要就是在session里面标记,这个用户的身份,之后在请求的时候,进行拦截判断用户身份是不是可以调用这个接口就好了,因为之前在写功能的时候,把这些功能都写在了上面,所以截图和代码不是特别全,可以加qq:1029273212索要源码,还有要是有大神能给我指点一二就更好了,期待和大家一起成长。

  • 0
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值