写点什么

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:547326

评论

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

国际最新AI算力评测标准SPEC ML即将发布

财见

【教程】 iOS混淆加固原理篇

教你如何判断Java代码中异步操作是否完成

华为云开发者联盟

Java 开发 华为云 华为云开发者联盟 异步操作

在Linux操作系统中,如何解决软件依赖关系?

小魏写代码

PhpStorm 2023 3.4最新激活码分享 附PhpStorm安装激活教程

Rose

Slave被误写入数据如何恢复到主库

GreatSQL

带使能控制的锂电池充放电解决方案

芯动大师

Programming Abstractions in C阅读笔记:p293-p302

codists

文心一言 VS 讯飞星火 VS chatgpt (201)-- 算法导论15.2 6题

福大大架构师每日一题

福大大架构师每日一题

全球视角:国外企业重视的AI高管职位

算AI

人工智能

害怕代码操作是“黑盒”,用代码审计将操作变”白盒”

极狐GitLab

一道 Java 八股,检测 AI 智商。是否颠覆了你对AI的认识

派大星

AI ChatGPT ChatGPT4

一文搞懂设计模式—代理模式

Java随想录

Java 设计模式 代理模式

From concept to reality: the development history and technical progress of WiFi 7/QCN9274

wallysSK

听 GPT 讲 client-go 源代码 (15)

fliter

如何在mac电脑上运行Windows应用?

Rose

CAS单点登录协议:让用户体验更便捷的身份验证方式

权说安全

身份认证 单点登录

好用的云盘本地加载工具:CloudMounter mac

Rose

Pydantic:Python 数据验证库的新宠

测吧(北京)科技有限公司

测试

超详细!彻底说明白Redis持久化

Java随想录

Java 数据库 redis 持久化

实例详解数据库的游标管理

华为云开发者联盟

数据库 后端 华为云 华为云GaussDB 华为云开发者联盟

《研发效能 100 问》全册升级发布:22 位专家携手共建研发效能实践经验手册!

思码逸研发效能

AnyTrans 8 for mac:安全快速地跨平台数据管理传输工具

Rose

Supermicro通过业界领先的全新系统产品组合,将前沿AI性能推向边缘计算环境

财见

听 GPT 讲 client-go 源代码 (16)

fliter

Pydantic:Python 数据验证库的新宠

测试人

Python 软件测试 自动化测试 测试开发

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