gpt4 book ai didi

Spring MVC 和 Jetty : Prevent jsessionid from being used in RedirectView on redirect to external site

转载 作者:行者123 更新时间:2023-12-04 21:26:12 26 4
gpt4 key购买 nike

在带有 Jetty 的 Spring MVC 2.5 中(可能带有任何 servlet 容器),我想通过 ModelAndView 中 View 名称的神奇“redirect:”前缀使用 RedirectView 重定向到外部站点。

不幸的是,RedirectView 使用 response.encodeRedirectURL(),所以我的(其他需要的) session ID 被附加到 URL。将 session id 携带到外部站点不仅存在安全风险,“;jsessionid=gagnbaba”字符串也可能被解释为其他站点上的 ContextPath/PathInfo 的一部分,从而导致错误的 URL。

除了实现我自己的 ExternalRedirectView 之外的任何“弹性”选项......并且还破解 ViewResolver 来解释“externalRedirect:”前缀? (需要 cookie 不是一种选择。)

莫里茨

最佳答案

现在这里是 ExternalRedirectView 按照我上面评论中的计划......这样做了。

import java.io.IOException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.view.RedirectView;

/** variant of RedirectView, will not add a session id to the url
*/
public class ExternalRedirectView extends RedirectView {
public ExternalRedirectView(String url, boolean contextRelative) {
super(url, contextRelative);
}

/** copied from @link{RedirectView#sendRedirect} and removed calls to
* reponse.encodeRedirectURL()
*/
@Override
protected void sendRedirect( HttpServletRequest request,
HttpServletResponse response, String targetUrl,
boolean http10Compatible ) throws IOException {
if (http10Compatible) {
// Always send status code 302.
response.sendRedirect(targetUrl);
}
else {
// Correct HTTP status code is 303, in particular for POST requests.
response.setStatus(303);
response.setHeader("Location", targetUrl);
}
}
}

我也已经有了自己的 ViewResolver,我在其中添加了新的 externalRedirect: magic vier 名称前缀的功能,现在显示为:
class MyViewResolver extends AbstractCachingViewResolver implements BeanFactoryAware {
[...]
private static final String EXTERNAL_REDIRECT_URL_PREFIX = "externalRedirect:";
[...]
@Override
protected View loadView( String viewName, Locale locale ) throws Exception {
View view;
if (viewName.startsWith(UrlBasedViewResolver.REDIRECT_URL_PREFIX))
{
view = new RedirectView(viewName.substring(UrlBasedViewResolver.REDIRECT_URL_PREFIX.length()), true);
}
else if (viewName.startsWith(EXTERNAL_REDIRECT_URL_PREFIX))
{
view = new ExternalRedirectView(viewName.substring(EXTERNAL_REDIRECT_URL_PREFIX.length()), true);
}
else

[...]
感谢所有阅读并思考它的人。

关于Spring MVC 和 Jetty : Prevent jsessionid from being used in RedirectView on redirect to external site,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2911457/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com