Springboot项目中判断本机网络是否可用,不可用则跳转登录页

项目需求,在断网重连的情况下,点击网页请求直接跳转登录页,但可能有写公司的网站访问时需要vpn的,就是断网后,即便你做了跳转登陆页,也看不出来有啥变化,但需求在这里。之前我也考虑了获取ipconfig中的IPV4、IPV6的域名,后来筛选了一下,感觉不太行,好像java这边不好做。所以不如直接取ping一个网站,通就通,不通就不通。下面的代码可以这样写,方法拿去改一下,添加一个过滤器,在每次请求的时候先执行过滤器,然后执行这个方法,返回true和false,以此来判断吧。不说是原创,借鉴了几个老哥的学习了一下,顺便说一下,各位老哥不要吐槽,我不喜欢代码里有魔法值,所以在上面定义了一下,各位老哥请见谅!!!

public class TestNetwork {

    public static final String PING = "ping ";

    public static final String REQUEST_URL = "www.baidu.com";

    public static final String GBK = "gbk";

    public static final String TTL = "TTL";

    public static final String NORMAL = "Network normal,The time is : ";

    public static final String EXCEPTION = "Network exception,The time is : ";

    public static final String DATE_FORMAT = "yyyy-MM-dd HH:mm:ss";

    public static boolean isNetWorkStatus() {

        boolean flag = false;
        String line = null;
        StringBuffer sb = new StringBuffer();

        try {
            Process process = Runtime.getRuntime().exec(PING + REQUEST_URL);
            BufferedReader buf =  new BufferedReader( new InputStreamReader(
                    process.getInputStream(), Charset.forName(GBK)));
            while ((line = buf.readLine()) !=  null) {
                sb.append(line);
                System.out.println(line);
            }
            buf.close();

            if (null != sb && !sb.toString().equals("")) {
                String runLog = "";
                if (sb.toString().indexOf(TTL) > 0) {
                    //Network normal
                    flag = true;
                    runLog = NORMAL + getCurrentTime();
                    System.out.println(runLog);
                } else {
                    //Network exception
                    flag =false;
                    runLog = EXCEPTION + getCurrentTime();
                    System.err.println(runLog);
                }
            }

        } catch (Exception e) {
            e.printStackTrace();
        }finally {

        }
        return flag;
    }


    public static String getCurrentTime() {
        SimpleDateFormat sdf = new SimpleDateFormat(DATE_FORMAT);
        String time = sdf.format(new Date());
        return time;
    }

    public static void main(String[] args) {
        System.out.println(isNetWorkStatus());
    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot项目,拦截器(Interceptor)负责拦截请求并进行相应的处理。当拦截器拦截到请求时,如果判断用户未登录或未经授权,则可以返回401状态码,表示未授权。 然而,当返回401状态码时,并不能直接跳转登录面。这是因为HTTP协议的特性,状态码是服务端返回给客户端的响应结果,客户端(浏览器)会根据不同的状态码做相应的处理。但是,它不会自动进行跳转。 为了实现跳转登录面的功能,可以在拦截器进行以下处理: 1. 如果拦截器拦截到请求时判断用户未登录或未授权,可以通过response对象将请求重定向到登录面。代码如下: ```java response.sendRedirect("/login"); // login为登录面的路径 ``` 2. 另一种方式是通过返回一个特定的JSON响应,告知客户端进行跳转。例如,可以返回一个包含登录面路径的JSON对象,客户端(浏览器)可以通过JavaScript获取到该路径,然后进行跳转。代码如下: ```java response.setContentType("application/json;charset=UTF-8"); response.getWriter().write("{\"redirectUrl\":\"/login\"}"); ``` 需要注意的是,拦截器只负责拦截请求和进行处理,具体的跳转逻辑应该在控制器实现。因此,在登录面对应的请求处理方法,根据具体的业务逻辑进行判断并进行跳转。 总结起来,拦截器拦截后返回401状态码并不能直接跳转登录面,但可以通过重定向或返回JSON响应的方式,通知客户端进行跳转跳转逻辑需要在控制器实现。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值