[SPRING] URL에서 jsessionid 제거
SPRINGURL에서 jsessionid 제거
나는 다음과 같은 기술로 프로젝트를 진행 중이다.
내가 Tomcat 서버에 배포하는 동안 URL 끝에 "JSESSIONID 456jghd787aa"가 추가되었습니다.
이 문제를 해결하려고했지만 그럴 수 없었습니다.
해결법
-
==============================
1.바람둥이 7을 위해 이것을 web.xml에 추가하십시오
바람둥이 7을 위해 이것을 web.xml에 추가하십시오
<session-config> <!-- Disables URL-based sessions (no more 'jsessionid' in the URL using Tomcat) --> <tracking-mode>COOKIE</tracking-mode> </session-config>
-
==============================
2.다음 필터로 문제를 해결할 수 있습니다 (http://randomcoder.org/maven/site/randomcoder-website/cobertura/org.randomcoder.security.DisableUrlSessionFilter.html에서).
다음 필터로 문제를 해결할 수 있습니다 (http://randomcoder.org/maven/site/randomcoder-website/cobertura/org.randomcoder.security.DisableUrlSessionFilter.html에서).
package com.companyname.projectname.web.filter; import java.io.IOException; import javax.servlet.Filter; import javax.servlet.FilterChain; import javax.servlet.FilterConfig; import javax.servlet.ServletException; import javax.servlet.ServletRequest; import javax.servlet.ServletResponse; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponseWrapper; import javax.servlet.http.HttpSession; /** * Servlet filter which disables URL-encoded session identifiers. * * <pre> * Copyright (c) 2006, Craig Condit. All rights reserved. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions are met: * * * Redistributions of source code must retain the above copyright notice, * this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright notice, * this list of conditions and the following disclaimer in the documentation * and/or other materials provided with the distribution. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" * AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE * ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE * LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * </pre> */ public class DisableUrlSessionFilter implements Filter { /* private static Log logger = LogFactory.getLog(DisableUrlSessionFilter.class); */ /** * Filters requests to disable URL-based session identifiers. */ public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { // skip non-http requests if (!(request instanceof HttpServletRequest)) { chain.doFilter(request, response); return; } HttpServletRequest httpRequest = (HttpServletRequest) request; HttpServletResponse httpResponse = (HttpServletResponse) response; // clear session if session id in URL if (httpRequest.isRequestedSessionIdFromURL()) { HttpSession session = httpRequest.getSession(); if (session != null) { session.invalidate(); } } // wrap response to remove URL encoding HttpServletResponseWrapper wrappedResponse = new HttpServletResponseWrapper( httpResponse) { @Override public String encodeRedirectUrl(String url) { return url; } @Override public String encodeRedirectURL(String url) { return url; } @Override public String encodeUrl(String url) { return url; } @Override public String encodeURL(String url) { return url; } }; // process next request in chain chain.doFilter(request, wrappedResponse); } /** * Unused. */ public void init(FilterConfig config) throws ServletException { } /** * Unused. */ public void destroy() { } }
-
==============================
3.servletContext.setSessionTrackingModes (EnumSet.of (SessionTrackingMode.COOKIE));
servletContext.setSessionTrackingModes (EnumSet.of (SessionTrackingMode.COOKIE));
-
==============================
4.다음과 같이 해당 설정을 http 태그에 추가 할 수 있습니다.
다음과 같이 해당 설정을 http 태그에 추가 할 수 있습니다.
<http auto-config="false" disable-url-rewriting="true">
-
==============================
5.Servlet 3.0을 사용하고 있지 않다면 PrettyFaces 다시 쓰기 규칙을 사용하여이 작업을 수행 할 수 있습니다. http://ocpsoft.org/support/topic/url-rewrite-removing-the-jsessionid-from-the-url#post-410
Servlet 3.0을 사용하고 있지 않다면 PrettyFaces 다시 쓰기 규칙을 사용하여이 작업을 수행 할 수 있습니다. http://ocpsoft.org/support/topic/url-rewrite-removing-the-jsessionid-from-the-url#post-410
-
==============================
6.다른 사람들이 제안한 것처럼 Tomcat에서 꺼내기를 원할 것입니다. 그러나 쿠키가 아직없는 경우 Shiro가 리디렉션의 끝에 추가하는 데 여전히 문제가 있습니다. 문제에 대한 티켓이 두 개 있습니다.
다른 사람들이 제안한 것처럼 Tomcat에서 꺼내기를 원할 것입니다. 그러나 쿠키가 아직없는 경우 Shiro가 리디렉션의 끝에 추가하는 데 여전히 문제가 있습니다. 문제에 대한 티켓이 두 개 있습니다.
https://issues.apache.org/jira/browse/SHIRO-360
https://issues.apache.org/jira/browse/SHIRO-361
나는 Tuckey의 URL을 다시 쓰기 위해 노력했다. 그리고 잠시 후 성공했다. 문제는 Shiro가 response.encodeURL ()을 호출하지 않으므로 아웃 바운드 규칙을 트립합니다. 인바운드 요청을 리디렉션하여 다음 두 가지 규칙을 사용하여 세션 ID를 제거 할 수있었습니다.
<rule> <note>Remove jsessionid from embedded urls - for urls WITH query parameters</note> <from>^/(.*);JSESSIONID=.*[?](.*)$</from> <to type="redirect">/$1?$2</to> </rule> <rule> <note>Remove jsessionid from embedded urls - for urls WITHOUT query parameters</note> <from>^/(.*);JSESSIONID=.*[^?]$</from> <to type="redirect">/$1</to> </rule>
세션 ID가 URL로 보내졌고 세션 ID가없는 위치로 리다이렉트 되었기 때문에 최소한 브라우저에는 나타나지 않지만 문제는 완전히 해결되지 않습니다. 그것이 전혀 나타나지 않으면 더 좋을 것입니다.
최신 정보:
SHIRO-360 및 SHIRO-361은 수정되었으며 Shiro 1.3.0에 수정되었습니다. SHIRO-361의 Brian Demers에 따르면 :
-
==============================
7.Jetty WebappContext :
Jetty WebappContext :
Set<SessionTrackingMode> trackingModes = new HashSet<>(); trackingModes.add(SessionTrackingMode.COOKIE); context.getSessionHandler().getSessionManager().setSessionTrackingModes(trackingModes);
from https://stackoverflow.com/questions/11327631/remove-jsessionid-from-url by cc-by-sa and MIT license
'SPRING' 카테고리의 다른 글
[SPRING] 스프링 MVC 주석 컨트롤러의 단위 테스트 방법 (0) | 2019.03.04 |
---|---|
[SPRING] 스프링 보안을 사용하여 실패한 로그인에서 사용자 이름을 얻으려면 어떻게해야합니까? (0) | 2019.03.04 |
[SPRING] 스프링 보안으로 세션 ID 검색하기 (0) | 2019.03.04 |
[SPRING] 스프링 빈을 동적으로 주입 (0) | 2019.03.04 |
[SPRING] Spring 애플리케이션 컨텍스트에 사전 구성된 Bean 추가하기 (0) | 2019.03.04 |