Spring Boot总结(五):安全设计

Spring Boot总结(一):入门

Spring Boot总结(二):Spring Boot中使用数据库

Spring Boot总结(三):Spring Boot界面设计

Spring Boot总结(四):提高数据库访问性能

Spring Boot总结(五):安全设计

Spring Boot总结(六):Spring Boot SSO

Spring Boot总结(七):使用分布式文件系统

Spring Boot总结(八):云应用开发

Spring Boot总结(九):构建高性能的服务平台

Spring Boot总结(十):自动配置实现原理

Spring Boot总结(十一):数据访问实现原理

Spring Boot总结(十二):微服务核心技术实现原理

Web应用的安全管理,主要包括两个方面的内容:

  1. 一方面是用户身份认证,即用户登录的设计;
  2. 另一方面就是用户授权,即一个用户在一个应用系统中能够执行哪些操作的权限管理

5.1 依赖配置管理

spring-cloud-starter-parent

spring-cloud-starter-security

5.2 安全策略配置

关于系统的安全管理以及各种设计,Spring Security已经大体上都已经实现了,只需要进行一些配置和引用,就能够正常使用;

自定义配置类继承WebSecurityConfigurationAdapter

重写configure方法,对HttpSecurity进行一些安全策略的配置:

  1. loginPage:设置一个使用自定义的登录页面URL
  2. loginSuccessHandler:登录成功处理器
  3. permitAll:完全允许访问的一些URL配置,可以使用通配符
  4. logout:
  5. logoutSuccessUrl:
  6. rememberMe:用来记住用户的登录状态,即用户没有执行退出的时候,再次打来页面将不用登录
  7. csrf:这个一个防止跨站请求伪造攻击的策略设置;
  8. AccessDeniedPage:配置一个拒绝访问的提示链接

1. 权限管理配置

可以在配置文件中进行相应的配置:

2. 登录成功处理器

3. 防攻击策略

因为Spring Security的跨站请求伪造(cross-site request forgery,CSRF)即阻止跨站请求伪造攻击的功能很完善,所以使用Spring Security之后,对于新建、修改和删除操作,必须进行特殊的处理,才能正常使用。

要求在所有具有上面操作请求的页面中加入如下代码片段:可以将其放入到公共页面中,然后在其他的页面中引用。

<meta name=”_csrf” th:content=”${_csrf.token}” />

<meta name=”_csrf_header” th:content=”${_csrf.headerName}” />

另外加入如下js:功能就是在表单提交的时候放入一个token,服务端验证该token是否有效,只允许有效的token请求,否则拒绝当前操作

$(function (){

         var token=$(“meta[name=’ _csrf’]]”).attr(“content”);

         var header=$(“meta[name=’ _csrf_header’]”) .attr(“content”);

         $(document).ajaxSend(function(e,xhr,options)){

         xhr.setRequestHeader(header,token);

});

});

如果要对第三方开放接口,就只能对特定的URL使用排除CSRF保护的方法来实现了。

4. 记住登录状态

rememberMe().tokenValiditySeconds(86400).tokenRepository(tokenRepository()),它是用来记住用户登录状态的一个配置。

为了实现这个功能,需要将一个用户的登录令牌等信息保存在数据库中;

Spring Security提供了一个实体类,对应persistent_logins这个表;

5.3 登录认证设计

1. 用户实体建模

2. 用户身份验证

3. 登录界面设计

4. 验证码验证

5.4 权限管理设计

1. 权限管理配置

2. 权限管理过滤器

继承于Spring Security的AbstractSecurityInterceptor,实时监控用户的行为,防止用户访问未经过授权的资源;

3. 权限配置资源管理器

权限配置资源管理器实现了Spring Security 的FilterInvocationSecurityMetadataSource,它在启动的时候导入权限配置列表,权限配置资源管理器为权限决定器实时提供支持,判断用户访问的资源是否在受保护的范围之内;

4. 权限管理决断器

实现Spring Security的AccessDecisionManage,重载了decide函数,使用了自定义的决断管理

用户访问受保护的资源的时候,决断器判断用户是否对该资源具有访问权限,如果没有权限将拒绝访问,并提供错误提示;

5.5 根据权限设置链接

5.6 运行与发布

1. 系统初始化

2. 系统运行与发布

5.7 小结

源代码地址:

https://github.com/chenfromsz/spring-boot-security

猜你喜欢

转载自blog.csdn.net/qq_36807862/article/details/81284975
今日推荐