Więc skończę z tym ...JsessionId - jak uniknąć; jsessionid = XXX przy pierwszym wywołaniu strony? to działa, czy pierwsza strona jest JSP
Mam aplikacja, która wykorzystuje się index.jsp welcome-strony z <iframe></iframe>
zawartości iframe jest JSF strona. Gdybym dostęp index.jsp widzę cookie już na pierwszym Wsiadaj Firebug:
Set-Cookie JSESSIONID=C615DA89B6EF73F801973EA3DCD3B226; Path=/
strony z dziedziczy ten JSESSIONID. ALE: kiedy mam bezpośredni dostęp do strony z <iframe/>
, otrzymuję jsessionId przepisany na wszystkie adresy URL bez pliku cookie - na pierwsze żądanie. Następnie używany jest plik cookie. Wszystko jest w porządku - jeśli: System zabezpieczeń pozwoliłby mi na przepisywanie adresów URL.
uruchomić JBoss 4.2.2
chcę osiągnąć takie samo zachowanie jak mam z index.jsp - przykład zawsze używaj ciasteczek i zawsze unikaj przepisywania http.
[EDIT] dzięki odpowiedzi balusc za to pisałem:
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;
}
}
Nie zapomnij dodać go do listy 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>
dzięki. Czy gdzieś na twojej stronie jest "darowizna na dobroć"? Czy mogę zamówić pizzę? – Toskan
Nie ma za co. W prawej kolumnie mojej witryny/blogu znajduje się przycisk wpłaty w systemie PayPal. To jedyna droga do tej pory. – BalusC
wygląda na to, że nie mogę wysłać Ci osobistej wiadomości. Powinieneś wymyślić, jak wymusić na paypal angielski. Ten holender jest nieco mylący :-) "Snel doneren" :-D – Toskan