一个简单的Filter拦截器,自定义返回异常

HandlerInterceptor 存在请求后body置空的问题,

Filter简单

@Slf4j
@Component
public class HttpFilter implements Filter {

    //获取配置管理员ids
    @Value("${adminHttpUser.userIds}")
    private String userIds;

    @Override
    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {

        //请求地址
        HttpServletRequest httpServletRequest = (HttpServletRequest) servletRequest;
        String servletPath = httpServletRequest.getServletPath();


        //如果是api/in、/api/out接口,必须是管理员才能访问
        if (servletPath.contains("/api/in") || servletPath.contains("/api/out")) {
            
            //当前用户id
            String userId = WebRequestUtils.getRequest().getHeader(Const.REQUEST_USER_ID);
            //获取管理员ids
            List<String> userIdList = Arrays.asList(userIds.split(","));
            if (A.isEmpty(userIdList)) {
                 //自定义返回提示
                ServletOutputStream outputStream = servletResponse.getOutputStream();
                R result = new R("500", "未设置管理员,不能访问");
                JSON parse = JSONUtil.parse(result);
                outputStream.write(parse.toString().getBytes());
                outputStream.flush();
                //配置文件没有配置管理员id,直接跳过
                return;
            }
            if (!userIdList.contains(userId)) {
                String reason = ResultMsgHodler.NOT_PERMISSION.getReason();
                ServletOutputStream outputStream = servletResponse.getOutputStream();
                //自定义返回对象,可自行设置
                R result = new R("500", "非管理员登录:" + reason);
                JSON parse = JSONUtil.parse(result);
                outputStream.write(parse.toString().getBytes());
                outputStream.flush();
                return;
            }
        }
        //通过doFilter
        filterChain.doFilter(servletRequest, servletResponse);
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值