写点什么

Spring Security 4.0: WebSocket、Spring Data 和 Test Support

  • 2015-04-22
  • 本文字数:2219 字

    阅读完需:约 7 分钟

Spring Security 团队发布了 Spring Security 4.0.0 ,不但提供了更多缺少的安全性,还增加了几个新的特性。重要主题包括 WebSocket 安全性、Spring Data 集成、更好的测试支持,并引进了 Apache 许可的开源项目 Spring Session 。Spring Session 作为项目的 HttpSession 提供者,从而简化客户端的开发。这样开发人员就可以从任何环境中访问会话了,它支持集群环境,具有可插拔的 session-id 策略并支持 websockets。

WebSocket 安全性

Spring’s WebSocket 已支持 Spring 的安全性,但尚未针对 JSR-356 (Java API for WebSocket) 提供直接的支持。你可以使用如下 Spring 的 Java Configuration 在 websocket 通道上配置安全性。

复制代码
@Configuration
public class WebSocketSecurityConfig
extends AbstractSecurityWebSocketMessageBrokerConfigurer {
protected void configureInbound(MessageSecurityMetadataSourceRegistry messages) {
messages.simpDestMatchers("/user/*").authenticated();
}
}

Spring Data 集成

现在可以用 SpEL 在 Spring Data 查询语句内获取当前用户了。如何要使用这个特性,你需要定义一个 @Bean。

复制代码
@Bean
public SecurityEvaluationContextExtension securityEvaluationContextExtension(){
return new SecurityEvaluationContextExtension();
}

然后,你就可以在查询语句中引用 Spring Security 的当前用户了。示例如下:

复制代码
public interface BlogRepository extends JpaRepository<blog long=""> {
@Query("select blog from Blog blog where blog.user.login = ?#{principal.username}")
List<blog> findAllForCurrentUser();
}</blog></blog>

提升测试的支持

Spring Security 4.0 增加了许多的注解以简化需要认证的测试方法。例如,如果你有一个方法带有 @PreAuthorize(“已认证”),可以用以下的机制予以测试:

  • @WithMockUser: 把它增加到一个 @Test 方法里,该方法的用户名为“user”,密码为“password”,角色为“ROLE_USER”。你可以在注解中用具体的参数值覆盖这些参数:比如 @WithMockUser(username=“admin”,roles={“USER”,“ADMIN”})
  • @WithUserDetails: 与 @WithMockUser 类似,但是可以自定义认证,减少与 Spring Security 的耦合。
  • @WithSecurityContext: 提供了最大的灵活性,你可以用它创建自己定制的测试注解。

Spring Security 4.0 也可以和 Spring MVC Test (4.1.3+) 一起使用。如下示例演示了集成这两个框架要执行的所有设置。

复制代码
import static org.springframework.security.test.web.servlet.setup.SecurityMockMvcConfigurers.*;
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration
@WebAppConfiguration
public class CsrfShowcaseTests {
@Autowired
private WebApplicationContext context;
private MockMvc mvc;
@Before
public void setup() {
mvc = MockMvcBuilders
.webAppContextSetup(context)
.apply(springSecurity())
.build();
}
}

从 ****Spring Security 3.x 4.x**** 的迁移

Spring Security 团队发表了一篇《从 Spring Security 3.x 到 4.x 的迁移指南》。它包括 XML 配置文件和 Java Configuration 的迁移指令。甚至,它还在一份迁移示例中提供了一份差异列表,高亮显示了需要修改的内容:

Spring Security 4.0 Java Configuration

最基本的 Spring Security 是用 Java configuration 创建一个 Servlet Filter,它对所有的安全负责(URL 保护、证书验证、登录重定义等等)。它只有几行代码,而且有一半是类的导入。

复制代码
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.*;
import org.springframework.security.config.annotation.authentication.builders.*;
import org.springframework.security.config.annotation.web.configuration.*;
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}
}

代码不多,却提供了许多的特性:

  • 应用中的每个 URL 都需要经过认证
  • 为你生成一个登录表单
  • 允许以用户密码的方式进行认证
  • 允许用户登出
  • 预防 CSRF 攻击
  • 会话固定保护
  • 安全标头整合
    • 针对安全请求的 HTTP Strict Transport Security
    • 整合 X-Content-Type-Options
    • 缓存控制
    • 整合 X-XSS-Protection
    • 整合 X-Frame-Options 以协助预防点击劫持
  • 集成 HttpServletRequest API 方法:getRemoteUser()、getUserPrinciple()、isUserInRole(role)、login(username, password) 和 logout()

要在 Spring Boot 1.2 项目中使用这个版本,你需要按如下写法覆盖 Spring Security 版本:

复制代码
<properties>
    <spring-security.version>4.0.0.RELEASE</spring-security.version>
</properties>

要了解更多的 Spring Security 4.0 信息,请查阅 Spring Security 领导 Rob Winch 在 InfoQ 的演讲:《 Spring Security 4.0 从零开始》。点击此处可获得本次演讲的幻灯片。

查看英文原文: Spring Security 4.0: WebSocket, Spring Data and Test Support

2015-04-22 08:547424

评论

发布
暂无评论
发现更多内容

Java小程序调用物流接口服务:快递鸟API集成指南

快递鸟

AI Compass前沿速览:Nano Banana玩法教学、AgentScope、Hunyuan-MT-7B、HunyuanWorld-Voyager、AudioStory

汀丶人工智能

厌倦了日复一日?不如从升级鸿蒙5.1,换个手机主题开始!

最新动态

刷新记录:TapData Oracle 日志同步性能达 80K TPS,重塑实时同步新标准

tapdata

Tapdata 实时数据同步 Oracle日志解析 Oracle实时同步 Oracle数据同步工具

Jenkins 可观测最佳实践

观测云

CI/CD

API管理进入新阶段:iPaaS如何统一接口治理与运维?

谷云科技RestCloud

数据治理 数据传输 API治理 API管理 ipaas

mybatis中<if>条件判断带数字的字符串失效问题

刘大猫

人工智能 算法 智慧城市 光电科学 材料科学

淘宝闪购实时分析黑科技:StarRocks + Paimon撑起秋天第一波奶茶自由

StarRocks

阿里巴巴 StarRocks 物化视图 paimon 实时湖仓架构

构建基于 Spring Boot 的 GaussDB 数据访问应用:数据的增删改查

华为云开发者联盟

springboot Gauss DB 华为开发者空间

百度智能云「智能集锦」自动生成短剧解说,三步实现专业级素材生产

Baidu AICLOUD

视频云 智能剪辑

设备点检 设备维护经验总结(5)

万里无云万里天

工业 设备维护 工厂运维 设备点检

袋鼠云产品功能更新一探究竟|实时开发,效率再升级!

袋鼠云数栈

数据治理 数据产品 数据智能 数字孪生 空间智能

当Playwright遇见MCP,AI智能体实现自主化UI回归测试

测试人

软件测试

AI Agent重构SOC:下一代智能安全运营平台的能力跃迁

日志易

AI SOC 日志易 安全运营中心

CSS 特异性控制:层叠层 vs. BEM vs. 工具类

qife122

CSS 样式管理

基于仓颉编程语言的四则运算解释器开发秘籍

华为云开发者联盟

CodeArts 仓颉 华为开发者空间

AI算子广场,大幅降低多模态数据处理门槛

北京中暄互动广告传媒有限公司

企业怎么挑合适的数据集成工具?

谷云科技RestCloud

Apache 数据同步 ETL 数据集成工具 informatica

智能推荐新纪元:快手生成式技术对系统边界的消融与重建

老周聊架构

AICon

设备点检 设备维护经验总结(4)

万里无云万里天

工业 设备维护 工厂运维 设备点检

有了 AI 写代码,还缺什么?资深工程师:28 寸专业编程显示器 + Cursor 告别代码疲劳

鸽芷咕

显示器 明基RD320U 编码体验

Data Agent 再升级:一客一策,营销服务的理想型来了!

北京中暄互动广告传媒有限公司

代码可读性与命名艺术:空间布局与命名的核心原则

qife122

代码可读性 命名约定

黑龙江等保测评公司选择关键维度:服务能力与适配性

等保测评

哈尔滨二级等保实施重点:安全建设与管理的关键环节

等保测评

在AI技术唾手可得的时代,挖掘新需求成为核心竞争力——某知名教育游戏辅助工具需求洞察

qife122

需求分析 功能优化

HyperMesh几何修复、清理和简化

智造软件

CAE软件 Hypermesh hyperworks

哈尔滨二级等保办理全流程:从准备到完成的清晰指引

等保测评

火山引擎数智平台发布 Data Agent"一客一策"与 AI 数据湖"算子广场"

极客天地

qData 数据中台【开源版】发布 1.0.5 版本,全面提升规则治理、非结构化数据处理与部署体验

千桐科技

qData 开源数据中台 Java数据中台 千数平台 数据治理平台

Spring Security 4.0: WebSocket、Spring Data 和 Test Support_安全_Matt Raible_InfoQ精选文章