Nic*_*ich 12 java spring httponly spring-boot
我想关闭我认为是Spring Boot默认的HttpOnly会话.如何在弹簧靴上关闭HttpOnly?
我目前有以下代码:
@RequestMapping(value = "/stuff", method = GET)
public @ResponseBody
myObject doStuff(HttpSession session)
{
session.setAttribute("foo", "bar");
return new MyObject();
}
Run Code Online (Sandbox Code Playgroud)
这会在HTTP调用上返回响应头:
Set-Cookie: JSESSIONID=D14846D9767B6404F1FB4B013AB66FB3; Path=/; HttpOnly
Run Code Online (Sandbox Code Playgroud)
注意HttpOnly标志.我想把它关掉.我该怎么办?
旁注:是的我知道httpOnly是一个安全功能,通过关闭它允许javascript访问我的cookie即XSS.
另外,我没有默认配置以外的任何配置.
@ComponentScan
@EnableAutoConfiguration
public class WebApplication {
public static void main(String[] args) {
SpringApplication app = new SpringApplication(WebApplication.class);
app.run(args);
}
}
Run Code Online (Sandbox Code Playgroud)
Jim*_*imB 12
适用于spring boot的已接受答案的另一种替代方法是覆盖您的自定义方法EmbeddedServletContainerCustomizer.
首先,实现界面:
@Configuration
@ComponentScan
@EnableAutoConfiguration
public class Application implements EmbeddedServletContainerCustomizer
Run Code Online (Sandbox Code Playgroud)
然后为customize方法添加覆盖:
@Override
public void customize(final ConfigurableEmbeddedServletContainer container)
{
((TomcatEmbeddedServletContainerFactory) container).addContextCustomizers(new TomcatContextCustomizer()
{
@Override
public void customize(Context context)
{
context.setUseHttpOnly(false);
}
});
}
Run Code Online (Sandbox Code Playgroud)
顺便说一句,我发现httpOnly根本没有为我设置..所以我不得不使用这种方法来打开httpOnly(显然我的设置上面是'true').
您还可以使用此方法调整tomcat中的其他内容,例如为json打开gzip并扩展max http headersize(在我需要执行此操作的情况下进行kerberos身份验证):
((TomcatEmbeddedServletContainerFactory) container).addConnectorCustomizers(new TomcatConnectorCustomizer()
{
@Override
public void customize(final Connector connector)
{
AbstractHttp11Protocol httpProtocol = (AbstractHttp11Protocol) connector.getProtocolHandler();
httpProtocol.setMaxHttpHeaderSize(65536);
httpProtocol.setCompression("on");
httpProtocol.setCompressionMinSize(256);
String mimeTypes = httpProtocol.getCompressableMimeTypes();
String mimeTypesWithJson = mimeTypes + "," + MediaType.APPLICATION_JSON_VALUE;
httpProtocol.setCompressableMimeTypes(mimeTypesWithJson);
}
});
Run Code Online (Sandbox Code Playgroud)
小智 8
server.servlet.session.cookie.http-only=false
Run Code Online (Sandbox Code Playgroud)
(属性更新)
参考https://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.html
Tomcat 有一个名为的上下文属性useHttpOnly,用于检查:
是否应该在会话 cookie 上设置 HttpOnly 标志以防止客户端脚本访问会话 ID?默认为 true。
所以需要将其设置为 false。链接的配置适用于非嵌入式 Tomcat 服务器。我们需要找到一种方法来使用嵌入式 Tomcat 来实现这一点。
操作方法如下。您声明一个@Bean将 a 添加EmbeddedServletContainerFactory到上下文的方法。您可以通过指定配置适当属性的TomcatEmbeddedServletContainerFactorya 来配置返回的值。TomcatContextCustomizer
@Bean
public EmbeddedServletContainerFactory servletContainer() {
TomcatEmbeddedServletContainerFactory factory = new TomcatEmbeddedServletContainerFactory();
factory.setTomcatContextCustomizers(Arrays.asList(new CustomCustomizer()));
return factory;
}
static class CustomCustomizer implements TomcatContextCustomizer {
@Override
public void customize(Context context) {
context.setUseHttpOnly(false);
}
}
Run Code Online (Sandbox Code Playgroud)
该解决方案之所以有效,是因为您使用的是 Tomcat。对于不同的Servlet容器,解决方案会有所不同。
至少在 Spring Boot >= 1.4 上,它更容易,只需使用以下属性:
server.servlet.session.cookie.http-only= # "HttpOnly" flag for the session cookie. configuration property.
Run Code Online (Sandbox Code Playgroud)
如官方文档中所述。
| 归档时间: |
|
| 查看次数: |
13413 次 |
| 最近记录: |