i Vâng đang thực hiện với điều này ...JsessionId - cách tránh, jsessionid = XXX trong lần gọi đầu tiên tới trang? nó hoạt động nếu trang đầu tiên là jsp
Tôi có một ứng dụng mà sử dụng các index.jsp chào đón trang với một <iframe></iframe>
các nội dung của khung nội tuyến là một trang JSF. Nếu tôi truy cập vào index.jsp, tôi thấy cookie đã có trong lần truy cập đầu tiên trong firebug:
Set-Cookie JSESSIONID=C615DA89B6EF73F801973EA3DCD3B226; Path=/
Trang của kế thừa jsessionid này. NHƯNG: khi tôi truy cập trực tiếp vào trang của <iframe/>
Tôi nhận được jsessionId được viết lại cho tất cả các URL không có cookie - theo yêu cầu đầu tiên. Sau đó, cookie được sử dụng. Điều này là tốt - nếu: Hệ thống bảo mật sẽ cho phép tôi thực hiện ghi đè url.
Tôi chạy jboss 4.2.2
Tôi muốn đạt được hành vi tương tự như tôi có với index.jsp - ví dụ: luôn sử dụng cookie và luôn tránh viết lại http.
[EDIT] nhờ câu trả lời balusc của tôi đã viết này:
public class JsessionIdAvoiderFilter implements Filter {
public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws IOException,
ServletException {
boolean allowFilterChain = redirectToAvoidJsessionId((HttpServletRequest) req, (HttpServletResponse)res);
//I'm doing this because if I execute the request completely, it will perform a pretty heavy lookup operation. No need to do it twice.
if(allowFilterChain)
chain.doFilter(req, res);
}
public static boolean redirectToAvoidJsessionId(HttpServletRequest req, HttpServletResponse res) {
HttpSession s = req.getSession();
if(s.isNew()) {
//after the redirect we don't want to redirect again.
if(!(req.isRequestedSessionIdFromCookie()&&req.isRequestedSessionIdFromURL()))
{
//yeah we have request parameters actually on that request.
String qs = req.getQueryString();
String requestURI = req.getRequestURI();
try {
res.sendRedirect(requestURI+"?"+qs);
return false;
} catch (IOException e) {
logger.error("Error sending redirect. " + e.getMessage());
}
}
}
return true;
}
}
Đừng quên để thêm nó vào bạn web.xml
<filter>
<display-name>JsessionId Filter</display-name>
<filter-name>jsessionIdAvoiderFilter</filter-name>
<filter-class>my.namespace.JsessionIdAvoiderFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>jsessionIdAvoiderFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
cảm ơn. Có một 'tặng cho lòng tốt lợn may mắn' trên trang web của bạn ở đâu đó? Tôi có thể gọi cho bạn pizza không? – Toskan
Bạn được chào đón. Trên cột bên phải của trang web/blog của tôi, bạn có thể tìm thấy một nút đóng góp paypal. Đó là cách duy nhất cho đến nay. – BalusC
có vẻ như tôi không thể gửi cho bạn một tin nhắn cá nhân. Bạn nên tìm ra cách để buộc paypal là tiếng anh. Tiếng Hà Lan đó hơi khó hiểu :-) "Snel doneren" :-D – Toskan