写点什么

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

评论

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

软件测试 | 文件上传与弹窗处理

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

测试

中国计算机设计大赛来啦!用飞桨驱动智慧救援机器狗

飞桨PaddlePaddle

深度学习 paddle 大赛

试试 MyBatis 流式查询,很强!!!

Steven

深入react源码看setState究竟做了什么?

flyzz177

React

软件测试 | Web控件定位与常见操作

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

测试

软件测试 | 网页frame与多窗口处理

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

测试

软件测试 | Selenium对多浏览器处理

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

测试

手写JavaScript常见5种设计模式

helloworld1024fd

JavaScript

深度使用国产Bg-Tinkle数据库客户端—太赞了,居然还集成chatGPT AI生成SQL

非喵鱼

Java MySQL 数据库 国产软件 Tinkle

关于我在学习LFU的时候,在开源项目捡了个漏这件事

why技术

Java 面试 算法

软件测试 | 隐式等待、显示等待和强制等待

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

测试

看透react源码之感受react的进化

goClient1992

React

细说react源码中的合成事件

flyzz177

React

软件测试 | Selenium 安装

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

测试

软件测试 | Selenium测试用例编写

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

测试

融云入围「2022 云办公平台 TOP50」,进入「中国协同办公产业图谱」

融云 RongCloud

手写现代前端框架diff算法-前端面试进阶

helloworld1024fd

JavaScript

React-Hooks源码深度解读

goClient1992

React

从源码角度看React-Hydrate原理

flyzz177

React

软件测试 | Selenium IDE用例录制

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

测试

软件测试 | Web控件的交互进阶

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

测试

软件测试 | 执行JavaScript脚本

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

测试

ChatGPT 下一步,分配对象脱单有望

融云 RongCloud

软件测试 | 什么是PageObject设计模式

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

测试

百度前端必会手写面试题整理

helloworld1024fd

JavaScript

测试进阶之路—新手关于测试碎碎念篇

京东科技开发者

测试 经验分享 分析 效能 企业号 2 月 PK 榜

Redis分布式锁正确打开方式

京东科技开发者

数据库 redis JVM 分布式锁 企业号 2 月 PK 榜

ChatGPT类AI软件供应链的安全及合规风险

墨菲安全

代码安全检测 墨菲安全 软件供应链安全 ChatGPT

升级到JDK17和Spring Boot 2.7.8

xiaoboey

Spring Cloud Spring Boot

React源码分析(一)Fiber

goClient1992

React

AntDB-M设计之内存结构

亚信AntDB数据库

AntDB aisware antdb AntDB数据库 企业号 2 月 PK 榜

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