Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在SpringMVC中删除url重写中的jsessionid_Java_Spring_Session_Spring Mvc_Jsessionid - Fatal编程技术网

Java 在SpringMVC中删除url重写中的jsessionid

Java 在SpringMVC中删除url重写中的jsessionid,java,spring,session,spring-mvc,jsessionid,Java,Spring,Session,Spring Mvc,Jsessionid,我使用的是spring MVC,JSSessionID中有一个问题,我发现如果浏览器中没有启用Cookie,则会在url中注入JSSessionID,生成如下url: 实际上,浏览器没有问题,但当谷歌抓取我的网站时,谷歌抓取器似乎没有cookie:),它们以那种形式存储我的网站的URL,我的网站出现在搜索结果中,其URL类似于包含JSSessionID的URL 实际上,它运行起来没有任何问题,但我更喜欢在谷歌搜索结果中清晰显示URL,而不使用JSSessionID 有什么帮助吗?切中要害:只要

我使用的是spring MVC,JSSessionID中有一个问题,我发现如果浏览器中没有启用Cookie,则会在url中注入JSSessionID,生成如下url:

实际上,浏览器没有问题,但当谷歌抓取我的网站时,谷歌抓取器似乎没有cookie:),它们以那种形式存储我的网站的URL,我的网站出现在搜索结果中,其URL类似于包含JSSessionID的URL

实际上,它运行起来没有任何问题,但我更喜欢在谷歌搜索结果中清晰显示URL,而不使用JSSessionID


有什么帮助吗?

切中要害:只要用户不登录或执行POST操作,就不要让应用程序创建会话。不要调用
request.getSession()
request.getSession(true)
。不要为未登录用户创建或管理会话范围的bean。确保您正在使用的框架不会在未经您同意的情况下不必要地创建会话

如果由于应用程序的设计方式或使用的(MVC)框架的限制/缺陷,这确实是不可能的,那么最好的办法是将Googlebot请求重定向到没有JSSessionID标识符的URL。您可以使用它(例如,ApacheHttpd的著名Java变体)。以下是从其内容中提取的相关信息

隐藏来自googlebot的请求的jsessionid。

删除URL会话ID
带jsession=XXX,来自通过response.encodeURL()传递的URL。
角色?和#是我们唯一可以用来找出jsessionid结束位置的东西。
下面“from”中的表达式包含三个捕获组,最后两个是可选的。
1、一切在前;耶稣会
2、以后的一切;jesessionid=XXX以a开头?(以获取查询字符串)最多#
3、一切;jesessionid=XXX和可选的?XXX以#开头(以获取目标)
如,
从index.jsp;jssessionid=sss?qqq到index.jsp?qqq
从index.jsp;jssessionid=sss?qqq#ttt到index.jsp?qqq#ttt
从index.jsp;jsessionid=asdasdasd#dfds-index.jsp#dfds
来自u.jsp;jsessionid=wert.hg-u.jsp
from/;jsessionid=tyu-/
谷歌机器人
^(.*)(:;jsessionid=[^\?\]*)?(\?[^\\]*)?(\?[^\\]*))?(#*)$
$1$2$3

Spring可以配置为不这样做:

可以将Web应用程序配置为阻止它:

我会插入一个过滤器,如果它检测到一个bot(比如googlebot),它会使用一个定制的HttpServletResponse来覆盖encodeUrl方法,只返回原始URL。如果过滤器没有检测到机器人,它将简单地让链继续,这将让url编码等按照默认值继续。

在url中摆脱jsessionid的最简单方法是更改为登录页面上的标记,其中调用j_spring_security_check

<c:url var="authUrl" value="/static/j_spring_security_check" />
    <form action="${authUrl}" method="post">

如果不使用Spring http标记。
转到定义Spring过滤器链的applicationFilterChain bean。
通常情况下,您会有一个名为httpSessionContextIntegrationFilter的过滤器,或者是一个非常接近的过滤器,它基于类org.springframework.security.web.context.httpSessionContextIntegrationFilter或从中继承而来。
添加属性:

<property name="securityContextRepository" ref="securityContextRepositoryNoJSession"/>

然后添加bean:

<bean id="securityContextRepositoryNoJSession" class="org.springframework.security.web.context.HttpSessionSecurityContextRepository">
    <property name="disableUrlRewriting" value="true"/>
</bean>



这应该相当于将禁用url重写设置为true

我对你的答案印象深刻。BalusC应该写书。我是第一个买它的人:)
<bean id="securityContextRepositoryNoJSession" class="org.springframework.security.web.context.HttpSessionSecurityContextRepository">
    <property name="disableUrlRewriting" value="true"/>
</bean>