Я бы хотел полностью исключить HttpSession
Вы не можете полностью отключить его. Все, что вам нужно сделать, это просто , а не , чтобы получить хендл с помощью request.getSession()
или request.getSession(true)
в любом месте кода вашего веб-приложения и убедиться, что ваши JSP не делают этого неявно, установив <%@page session="false"%>
.
Если ваша главная задача на самом деле - отключить cookie, который использовался за кулисами HttpSession
, то в Java EE 5 / Servlet 2.5 вы можете сделать это только в конфигурации веб-приложения для конкретного сервера. Например, в Tomcat можно установить для атрибута cookies
значение false
в элементе <Context>
.
<Context cookies="false">
См. Также Специальная документация Tomcat . Таким образом, сеанс не будет сохранен в последующих запросах, которые не перезаписываются по URL - только всякий раз, когда вы по какой-то причине извлекаете его из запроса. В конце концов, если вам это не нужно, просто не захватывайте его, тогда оно вообще не будет создано / сохранено.
Или, если вы уже используете Java EE 6 / Servlet 3.0 или новее и действительно хотите сделать это с помощью web.xml
, тогда вы можете использовать новый элемент <cookie-config>
в web.xml
следующим образом, чтобы обнулить максимальный возраст:
<session-config>
<session-timeout>1</session-timeout>
<cookie-config>
<max-age>0</max-age>
</cookie-config>
</session-config>
Если вы хотите жестко закодировать в своем веб-приложении так, чтобы getSession()
никогда не возвращал HttpSession
(или "пустой" HttpSession
), тогда вам нужно будет создать фильтр, прослушивающий url-pattern
из /*
, который заменяет HttpServletRequest
реализацией HttpServletRequestWrapper
, которая возвращает все getSession()
методы null
, или фиктивной пользовательской реализацией HttpSession
, которая ничего не делает или даже выдает UnsupportedOperationException
.
@Override
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
chain.doFilter(new HttpServletRequestWrapper((HttpServletRequest) request) {
@Override
public HttpSession getSession() {
return null;
}
@Override
public HttpSession getSession(boolean create) {
return null;
}
}, response);
}
P.S. Это плохая идея? Я предпочитаю полностью отключать вещи, пока они мне действительно не нужны.
Если они вам не нужны, просто не используйте их. Это все. Действительно:)