使用Spring Security在Spring Boot中进行缓存

在这篇文章中,我想分享一下O&B的一个团队的经验教训。 他们正在使用带有Spring Security的Spring Boot。

默认情况下,Spring Security保护的所有内容都将通过以下HTTP标头发送到浏览器:

Cache-Control: no-cache, no-store, max-age=0, must-revalidate

本质上,响应将永远不会被浏览器缓存。 尽管这似乎效率低下,但实际上有充分的理由要采用这种默认行为。 当一个用户注销时,我们不希望下一个登录的用户能够看到前一个用户的资源(如果缓存了,则可以这样做)。

默认情况下不缓存任何内容,并保留显式启用缓存是有意义的。 但是,如果不缓存任何内容,则不好,因为这会导致高带宽使用和缓慢的页面加载。

很好的是,在Spring Boot中启用静态内容缓存非常容易(即使使用Spring Security也是如此)。 只需配置一个缓存周期。 就是这样!

# Boot 2.x
spring.resources.cache.cachecontrol.max-age=14400

# Boot 1.x
spring.resources.cache-period=14400

但是有一些陷阱! 对于某些版本,它不是那么简单! 让我进一步解释。

有几种方法可以返回内容:

  1. 通过Spring Boot自动配置的静态资源请求处理程序的静态内容
  2. 控制器方法返回视图名称(例如,解析为JSP)
  3. 返回HttpEntity (或ResponseEntity )的控制器方法

启用静态内容缓存

第一个(提供静态内容)是通过配置所述属性(通常在如上所述的application.properties中)来处理的。

通过HttpServletResponse设置

在第二种情况下,控制器处理程序方法可以选择通过HttpServletResponse方法参数设置“ Cache-Control”标头。

@Controller
... class ... {
    @RequestMapping(...)
    public String ...(..., HttpServletResponse response) {
        response.setHeader("Cache-Control", "max-age=14400");
        return ...; // view name
    }
}

只要Sp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Spring Boot Security 缓存可以用于提高应用程序的性能和减少数据库访问次数。Spring Security 支持多种缓存提供程序,例如 Ehcache、Redis、Guava 等。 要启用缓存,可以在 Spring Boot 的配置文件添加以下配置: ```yaml spring.cache.type=cacheProviderName ``` 其 `cacheProviderName` 是你所选择的缓存提供程序的名称。例如,如果你想使用 Ehcache 作为缓存提供程序,则可以将其配置为: ```yaml spring.cache.type=ehcache ``` 然后在 Spring Security ,可以使用 `@EnableCaching` 注解启用缓存功能: ```java @Configuration @EnableCaching public class SecurityConfig extends WebSecurityConfigurerAdapter { // ... } ``` 接下来,可以在 Spring Security 使用 `@Cacheable` 注解来缓存一些数据,例如用户信息、权限等: ```java @Service public class UserServiceImpl implements UserService { // ... @Cacheable(value = "users", key = "#username") public User getUserByUsername(String username) { // ... } // ... } ``` 在上面的示例,`@Cacheable` 注解表示将 `getUserByUsername` 方法的返回值缓存到名为 `users` 的缓存,并使用 `username` 参数作为缓存键。如果下次调用 `getUserByUsername` 方法时,传入相同的 `username` 参数,则直接从缓存获取数据,而不需要再次查询数据库。 需要注意的是,缓存使用可能会带来一些安全风险,例如缓存被攻击者篡改或泄露等。因此,在使用缓存时,需要采取相应的安全措施,例如设置缓存过期时间、对缓存数据进行加密等。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值