Spring实战之保护web应用

Spring实战读书笔记

第九章:保护web应用

Spring Security是为基于Spring的应用程序提供声明式安全保护的安全性框架。

过滤Web请求

  • Spring Security借助一系列Servlet Filter来提供各种安全性功能。但是我们要使用Security只需要配置一个Filter就行了。就是org.springframework.web.filter.DelegatingFilterProxy,它会拦截发往应用的请求,将请求委托给ID为springSecurityFilterChain的bean。

  • springSecurityFilterChain本身也是一个特殊的Filter,它可以链接一个或任意多个Filter。

  • 如果我们利用web.xml来配置DelegatingFilterProxy的话直接使用<filter>元素就行了,但是如果使用Java配置的话,我们需要创建一个扩展的新类,它需要继承AbstractSecurityWebApplicationInitializer,并不需要重载任何方法,Spring会帮我们在Web容器中注册DelegatingFilterProxy。

编写简单的安全性配置

  • 启用Spring Security(使用Java配置)

    • Spring Security必须配置在一个实现了WebSecurityConfigurer的bean中,所以我们的Security配置类必须要实现WebSecurityConfigurer或继承WebSecurityConfigurerAdapter。

    • 还要在配置类上加相应注解,如果你的Web项目没有使用Spring MVC开发就加@EnableWebSecurity注解,如果是Spring MVC开发的可以使用@EnableWebMvcSecurity注解。

    • @EnableWebMvcSecurity注解配置了一个Spring MVC的参数解析器,这样的话Controller方法就能通过带有@AuthenticationPrincipal注解的参数获得认证用户的username,而且他还配置了一个bean,能帮我们在表单中添加一个隐藏的跨站请求伪造(CSRF)token输入域。

  • 通过重载WebSecurityConfigurerAdapter的中不同的configure方法配置具体安全性。

基于数据存储认证用户

  • 使用基于内存的用户存储

  • 基于数据表进行认证

  • 基于LDAP进行认证

  • 配置自定义的用户服务

拦截请求

  • 在一个Web应用中,有的路径是可以上用户随意访问的,但有的是需要一定权限才能访问的,所以我们就要对用户的请求进行拦截。对每个请求进行细颗粒度安全控制的关键在于重载configure(HttpSecurity)方法。

  • Security内置了一系列的配置方法,让我们可以为指定的路径配置不同的要求(表9.4,P268)。

  • 配置的时候很重要的一点就是,要将最为具体的路径放在前面进行配置,最不具体的放在最后面。否则的话,那些不具体的路径会覆盖掉具体的路径。

  • 但是如果直接使用Security内置的方法有一个很大的缺陷,就是我们只能对一个路径添加一个配置方法,无法添加多个限定条件。Security提供一个access方法,只有方法内参数为true的时候,路径才能访问。同时,Security还通过一些安全相关的表达式扩展了Spring的表达式语言(表9.5),让我们可以自由的发挥。

  • 使用HTTP提交数据有很大的风险,我们可以使用requiresSecure方法要求页面使用HTTPS传输。

认证用户

  • 启用HTTP Basic认证:在configure(HttpSecurity)方法内调用httpbasic方法即可

  • 启用Remember-me功能:调用rememberMe方法,还可以通过tokenValiditySeconds设置token有效期

  • 登录与退出:可以通过formLogin().loginPage("/login")设置登录URL,通过.logout().logoutSuccessUrl("/").logoutUrl("/logout")分别设置退出成功后跳转的页面,以及退出的URL

保护视图

  • Spring Security提供了一个JSP标签库,以security为前缀。通过<security:authentication>可以获得用户认证的详细信息,使用<security:authorize>可以有条件的渲染视图内容。

  • Thymeleaf的安全方言也提供了域Security标签库相对应的功能。都是以sec为前缀。要使用Thymeleaf的安全方言还需要使用SpringTemplateEngine注册SpringSecurityDialect。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值