- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在带有 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);
}
}
}
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/
我是 Angular 5 和 Spring MVC 的新手,我正在尝试为我的应用程序创建登录功能。 我们没有使用 Spring Security,因为我们只使用 Spring MVC 模块提供的基本
我正在尝试从我的 servlet 重定向到外部域 URL。但重定向会在 url 末尾添加 ;jsessionid=ghdssdf... 。我不知道如何防止将 jsession id 附加到我的 url
使用浏览器对我的服务进行身份验证后,我发现一个包含以下键/值对的 cookie: JSESSIONID=40d4b01c47ddb858718291d319a1a817d3037fdc6f2c341c
所以,我正在构建一个应用程序,我希望用户能够向另一个用户发送链接并处理相同的数据。几乎不需要将数据保留超过 15 分钟,并且我希望应用程序不必依赖数据库。 我当前有一些变量存储在 HttpSessio
我试图了解 JSessionId 的唯一性和范围,因为它涉及多个不相关的域。 我已阅读 Under what conditions is a JSESSIONID created? ,还有一些问题 -
我听说 ebay 使用 Java,但我登录时没有找到 jsessionid cookie。 是否存在跟踪用户 session 的替代技术?如何避免使用 jsessionid? 最佳答案 有可能、许多不
我很好奇 jsessionid 使用哪种编码。 jsessionid 值始终只包含字母数字字符,不包含其他字符,这使得 URL 中的这种编码对于用户来说更安全。 最佳答案 session ID 的格式
要求是登录前后JSESSIONID必须不同。 流程是login.jsp -> loginwebaction -> loginsuccess.jsp -> filter -> otheraction 我
我需要禁用或删除 URL 中的 Jsessionid 如何做到这一点,它是否会在 ajax 请求期间引起任何副作用。我使用的是 struts 1.2 版本。 最佳答案 Servlet 3.0 允许您指
我正在使用带有 jsessionid 的 URL,例如。 http://localhost:8080/myservlet;jsessionid=123 然而,每当我在 HttpServletReque
这个问题在这里已经有了答案: Where is JSESSIONID stored? (JavaEE) (2 个答案) 关闭 8 年前。 我正在研究特定 Web 应用程序的工作原理,并且我想确切地确
我们有一个包含多个负载平衡和 tomcat 服务器的云环境,服务于单个 Web 应用程序(用 angularjs、spring-mvc 和 java 编写的单页面应用程序)。 由于网络配置中的一些未知
JSESSIONID 的创建时间/条件是什么? 它是按域划分的吗?例如,如果我有一个 Tomcat 应用服务器,并且我部署了多个 Web 应用程序,是否会为每个上下文(Web 应用程序)创建一个不同的
为了说明一些情况,我正在开发一个 API 来跟踪网站上的用户操作(匿名用户也是如此)。到目前为止,我们使用 jsessionId 来识别每个用户及其操作。 该 API 现在可以在 Tomcat 和 J
在用户进行身份验证时重置 session cookie 被认为是一种良好的安全做法。 如何用 Java 做到这一点? 到目前为止我的尝试是成功的,但我想知道是否有更好的方法: public stati
我有这样的疑问,JSESSIONID 的超时控制参数是什么?。具体考虑这个用例:我有一个移动客户端,它正在维护发送带有 JSESSIONID header 的 cookie 的 session ,但是
我知道这几乎是同一个问题:ask by Joe 我有一个网络应用程序。当我关闭窗口(单击浏览器上的 X)时,它将调用注销功能。 问题是当我打开 Web 应用程序并在不同窗口(新窗口或另一个选项卡)上打
创建JSESSIONID的时间/条件是什么? 是每个域吗?例如,如果我有一个 Tomcat 应用程序服务器,并且我部署了多个 Web 应用程序,是否会为每个上下文(Web 应用程序)创建一个不同的 J
我在使用 CURL 获取网页时遇到了一些问题。我认为原因是我的 CURL 请求不包含 JSESSIONID 值。 这是我的 cookie 文件最后的样子: direct.orange.co.il FA
我成功地为我的登录端点发送了一个 POST 请求,并创建了一个 JSESSIONID。我知道 JSESSIONID 由我在线程顶部的 HTTP Cookie 管理器保存,因为我看到它被用于线程中的几个
我是一名优秀的程序员,十分优秀!