Как настроить JBoss 4.0.*, Чтобы сделать сессионный cookie HttpOnly и безопасным?
Я старался
< Context cookies="true" crossContext="true">
< SessionCookie secure="true" httpOnly="true" />
в context.xml, но не распознается в jboss4.0
и я попробовал в Java-программе
String sessionid = req.getSession().getId();
resp.setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + ";Path="+req.getContextPath()+"; Secure; Domain="+req.getServerName()+"; HttpOnly");
для второго запроса он не позволяет получить объект проверки сеанса для сеанса, поэтому он показывает страницу с истекшим сроком сеанса
и я попробовал с фильтрами
public void doFilter(final ServletRequest req, final ServletResponse res, final FilterChain filterChain) throws IOException, ServletException {
final HttpServletResponse response = (HttpServletResponse) res;
final HttpServletRequest request = (HttpServletRequest) req;
System.out.println(response.containsHeader("SET-COOKIE"));
if (response.containsHeader("Set-Cookie")) { // *******
response.setHeader("SET-COOKIE", "JSESSIONID=" + request.getSession().getId() + "; Path=" + request.getContextPath()
+ "; HttpOnly" + (request.isSecure()?SECURE_FLAG : ""));
}
filterChain.doFilter(req, res);
}
ЕСЛИ я использую фильтр выше, то response.containsHeader("SET-COOKIE") или response.containsHeader("Set-Cookie") всегда возвращают false
Может ли кто-нибудь дать мне решение для конфигурации флага Jsessionid Jboss 4.0, как безопасный и httponly
2 ответа
Под server/default/deploy/jboss-web.deployer/conf/web.xml
искать фильтр, который вызывает org.jboss.web.tomcat.filters.ReplyHeaderFilter
и добавить установленные параметры cookie во время инициализации, т.е.
<filter>
<filter-name>CommonHeadersFilter</filter-name>
<filter-class>org.jboss.web.tomcat.filters.ReplyHeaderFilter</filter-class>
<init-param>
<param-name>X-Powered-By</param-name>
<param-value>Servlet 2.4; JBoss-4.2.3.GA (build: SVNTag=JBoss_4_2_3_GA date=200807181417)/JBossWeb-2.0;</param-value>
</init-param>
<init-param>
<param-name>Set-Cookie</param-name>
<param-value>Secure; HttpOnly</param-value>
</init-param>
Я могу подтвердить, что для JBoss 4.0.3 это работает, манипулируя заголовком в классе реализации Filter. Это работает для меня:
String sessionid = ((HttpServletRequest) request).getSession().getId();
((HttpServletResponse)response).setHeader("SET-COOKIE", "JSESSIONID=" + sessionid + "; HttpOnly");
Я еще не подтвердил, почему решение через context.xml не поддерживается. Я не нашел никаких ссылок, только сообщения в блоге, утверждающие, что единственный способ сделать это в JBoss 4 - программно. http://syams18.blogspot.se/2012/01/setting-httponly-in-jboss-httponly-is.html