Подтвердить что ты не робот

Удалить jsessionid в url переписать в spring mvc

Я использую spring MVC и имею проблему в jsessionid, я обнаружил, что jsessionid вводится в URL-адрес, если файлы cookie не включены в браузере, создавая такой URL:

http://localhost/categories;jsessionid=Bsls4aQFXA5RUDcmZKV5iw?cid=13001

На самом деле нет проблем с браузерами, но когда Google сканирует мой сайт и, похоже, у Google crawlers нет файлов cookie:), они сохраняют URL-адреса моего сайта в этой форме, и мой сайт появляется в результатах поиска с такими URL-адресами содержащий jsessionid.

На самом деле он работает без каких-либо проблем, но я предпочитаю, чтобы URL-адреса отображались в результатах поиска Google без использования jsessionid.

Любая помощь?

4b9b3361

Ответ 1

К моменту: просто не позволяйте своему приложению создавать сеансы до тех пор, пока пользователи не будут входить в систему или выполнять действия POST. Не вызывайте request.getSession() или request.getSession(true). Не создавайте и не управляйте сеансом beans для не зарегистрированных пользователей. Убедитесь, что используемые вами фреймворки без необходимости создают сеансы без того, что вы говорите, чтобы сделать это.

Если это действительно невозможно из-за способа разработки вашего приложения или из-за ограничений/ошибок используемых (MVC) фреймворков, лучше всего перенаправить запросы роботов Googlebot на URL-адреса без идентификатора JSESSIONID. Вы можете использовать Tuckey URL rewrite filter для этого (это, скажем, вариант Java Apache HTTPD, известный mod_rewrite). Здесь выдержка, относящаяся к ее странице .

Скрыть jsessionid для запросов от googlebot.


<outbound-rule>
     <name>Strip URL Session ID's</name>
     <note>
         Strip ;jsession=XXX from urls passed through response.encodeURL().
         The characters ? and # are the only things we can use to find out where the jsessionid ends.
         The expression in 'from' below contains three capture groups, the last two being optional.
             1, everything before ;jesessionid
             2, everything after ;jesessionid=XXX starting with a ? (to get the query string) up to #
             3, everything ;jesessionid=XXX and optionally ?XXX starting with a # (to get the target)
         eg,
         from index.jsp;jsessionid=sss?qqq to index.jsp?qqq
         from index.jsp;jsessionid=sss?qqq#ttt to index.jsp?qqq#ttt
         from index.jsp;jsessionid=asdasdasdsadsadasd#dfds - index.jsp#dfds
         from u.jsp;jsessionid=wert.hg - u.jsp
         from /;jsessionid=tyu - /
     </note>
     <condition name="user-agent">googlebot</condition>
     <from>^(.*?)(?:\;jsessionid=[^\?#]*)?(\?[^#]*)?(#.*)?$</from>
     <to>$1$2$3</to>
 </outbound-rule>

Ответ 3

Если вы не используете тег Spring http.
Перейдите в свой applicationFilterChain bean, который определяет цепочки фильтров Spring.
Обычно у вас будет фильтр под названием 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>


Это должно быть эквивалентно установке disable-url-rewriting в true

Ответ 4

Я бы ввел фильтр, который, если он обнаружит бота (например, googlebot), использует пользовательский HttpServletResponse, который переопределяет методы encodeUrl, чтобы просто вернуть необработанный URL. Если фильтр не обнаружит бота, он просто продолжит цепочку, которая должна позволить кодировку url и т.д. Продолжить по умолчанию.

Ответ 5

Самый простой способ избавиться от jsessionid в вашем URL-адресе - это изменить тег на странице входа, где вызывается j_spring_security_check для

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