关于#java#的问题:浏览器伪路劲

img


data-href="127.0.0.1/520"为真实路劲,点击a标签后,如何让浏览器上地址拦上显示的是127.0.0.1/sdfdsfdsf这个虚拟的路劲但还能跳转
我用的是Springboot html也写在后端,想知道怎么让浏览器上放的是虚拟的路劲但还是能点击跳转到真实路径下

参考GPT和自己的思路:

您可以使用Spring Boot提供的重定向功能来实现这个问题。具体步骤如下:

  1. 在Controller中定义一个处理方法,该方法处理虚拟路径的访问请求,并将其重定向到真实路径:
@RequestMapping("/sdfdsfdsf")
public String redirectToRealPath() {
    return "redirect:http://127.0.0.1/520";
}
  1. 在HTML页面中使用虚拟路径作为链接的href属性值:
<a href="/sdfdsfdsf" data-href="127.0.0.1/520">跳转</a>
  1. 当用户点击链接时,浏览器会向Spring Boot发送一个访问请求,Spring Boot会将该请求转发到Controller中定义的处理方法,该方法会将请求重定向到真实路径,并在重定向过程中让浏览器保持虚拟路径的显示状态。

注意,需要在Controller中添加跨域注解,以允许HTML页面跨域向Spring Boot发送请求:

@CrossOrigin
@RestController
public class MyController {
    // ...
}

参考GPT和自己的思路:

您好,首先感谢您对我的信任和咨询。针对您的问题,我提供以下解答:

在Java Springboot中,可以使用@Controller和@RequestMapping注解来映射请求和具体的处理方法。在处理方法中,可以使用response.sendRedirect()方法将浏览器重定向到真实路径。

同时,在Springboot中,可以使用Thymeleaf作为模板引擎,通过Thymeleaf的URL重写机制,可以将虚拟路径转换为真实路径,同时保持浏览器地址栏不变。

具体实现方法如下:

1.在Controller类中,处理虚拟路径的请求,并将请求重定向到真实路径:

@Controller
public class MyController {
    
    @RequestMapping("/sdfdsfdsf")
    public void urlRedirect(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String realPath = "127.0.0.1/520";
        response.sendRedirect(realPath);
    }
}

2.在Thymeleaf模板中,使用th:href属性将虚拟路径转换为真实路径:

<a th:href="@{/sdfdsfdsf}">跳转到真实路径</a>

3.启用Thymeleaf的URL重写功能,在application.properties文件中添加如下配置:

spring.thymeleaf.mode=HTML
spring.thymeleaf.encoding=UTF-8
spring.thymeleaf.servlet.rewrite-uri=true

这样,在点击标签时,即可在浏览器地址栏中显示虚拟路径,同时跳转到真实路径。

希望这些解答可以帮助到您,如有任何疑问,欢迎随时与我交流。

该回答引用GPTᴼᴾᴱᴺᴬᴵ
你可以在Spring Boot中使用URL重写的方法来实现这个需求。具体来说,你可以使用Spring Boot的拦截器(Interceptor)来实现这个功能,以下是实现步骤:

1.创建一个拦截器类,继承HandlerInterceptorAdapter类,并重写preHandle方法,在该方法中进行URL重写操作,代码如下:

public class RewriteInterceptor extends HandlerInterceptorAdapter {
 
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        String requestURI = request.getRequestURI();
        if (requestURI.startsWith("/sdfdsfdsf")) {
            String redirectUrl = "/520" + requestURI.substring(11);
            response.sendRedirect(redirectUrl);
            return false;
        }
        return true;
    }
}


2.在Spring Boot中配置拦截器,代码如下:

@Configuration
public class WebMvcConfig implements WebMvcConfigurer {
 
    @Autowired
    private RewriteInterceptor rewriteInterceptor;
 
    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        registry.addInterceptor(rewriteInterceptor);
    }
}


这样,当用户访问127.0.0.1/sdfdsfdsf时,拦截器将会把它重定向到127.0.0.1/520,同时浏览器地址栏显示的将是127.0.0.1/sdfdsfdsf。

参考GPT和自己的思路:

你可以在Springboot中添加一个Controller,用于处理这个虚拟路径的请求,并将请求重定向到真实路径。具体而言,你可以在Controller中添加一个方法,接收这个虚拟路径的请求,将真实路径作为参数,使用重定向将请求转发到真实路径。下面是一个示例代码:

@RequestMapping("/sdfdsfdsf")
public String redirect() {
    return "redirect:http://127.0.0.1/520";
}

这个方法将会接收 /sdfdsfdsf 这个虚拟路径的请求,并使用 redirect() 方法将请求重定向到真实路径 http://127.0.0.1/520%E3%80%82

至于如何让浏览器上显示虚拟路径,你可以使用浏览器的 history.pushState() 方法来实现。具体而言,你可以在页面加载完成后,使用 JavaScript 定义一个虚拟路径,然后使用 pushState() 方法将这个虚拟路径添加到浏览器的历史记录中。下面是一个示例代码:

<script>
window.onload = function() {
  var virtualPath = '/sdfdsfdsf';
  var realPath = 'http://127.0.0.1/520';
  history.pushState({}, '', virtualPath);
  document.getElementById('link').addEventListener('click', function(e) {
    e.preventDefault();
    window.location.href = realPath;
  });
}
</script>

<a href="#" id="link">click me</a>

这个代码使用 pushState() 方法将虚拟路径添加到浏览器历史记录中,并监听一个点击事件,在点击事件中使用真实路径进行跳转。需要注意的是,pushState() 方法不会触发浏览器的实际页面跳转,只会修改浏览器的历史记录,因此你需

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^