博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
(四十四)java版spring cloud+spring boot+redis多租户社交电子商务平台-security简单使用...
阅读量:7023 次
发布时间:2019-06-28

本文共 2368 字,大约阅读时间需要 7 分钟。

电子商务平台源码请加企鹅求求:三五三六二四七二五九。security的简单原理:

使用众多的拦截器对url拦截,以此来管理权限。但是这么多拦截器,不可能对其一一来讲,主要讲里面核心流程的两个。

首先,权限管理离不开登陆验证的,所以登陆验证拦截器AuthenticationProcessingFilter要讲;还有就是对访问的资源管理吧,所以资源管理拦截器AbstractSecurityInterceptor要讲;但拦截器里面的实现需要一些组件来实现,所以就有了AuthenticationManager、accessDecisionManager等组件来支撑。

现在先大概过一遍整个流程,用户登陆,会被AuthenticationProcessingFilter拦截,调用AuthenticationManager的实现,而且AuthenticationManager会调用ProviderManager来获取用户验证信息(不同的Provider调用的服务不同,因为这些信息可以是在数据库上,可以是在LDAP服务器上,可以是xml配置文件上等),如果验证通过后会将用户的权限信息封装一个User放到spring的全局缓存SecurityContextHolder中,以备后面访问资源时使用。

访问资源(即授权管理),访问url时,会通过AbstractSecurityInterceptor拦截器拦截,其中会调用FilterInvocationSecurityMetadataSource的方法来获取被拦截url所需的全部权限,在调用授权管理器AccessDecisionManager,这个授权管理器会通过spring的全局缓存SecurityContextHolder获取用户的权限信息,还会获取被拦截的url和被拦截url所需的全部权限,然后根据所配的策略(有:一票决定,一票否定,少数服从多数等),如果权限足够,则返回,权限不够则报错并调用权限不足页面。

虽然讲得好像好复杂,读者们可能有点晕,不过不打紧,真正通过代码的讲解在后面,读者可以看完后面的代码实现,再返回看这个简单的原理,可能会有不错的收获。

在spring boot中使用security 首先导入spring security的包:

org.springframework.boot
spring-boot-starter-security
复制代码

在spring security中有一个非常重要的配置类需要编写 就是继承这个抽象类WebSecurityConfigurerAdapter,如下代码所示 这个bean的目的是将我们的用户存到内存中,这个用于调试还是可以的,但是我们开发中是不存在这样的

@Bean        @Override        protected UserDetailsService userDetailsService(){            InMemoryUserDetailsManager manager = new InMemoryUserDetailsManager();            manager.createUser(User.withUsername("user_1").password("123456").authorities("USER").build());            manager.createUser(User.withUsername("user_2").password("123456").authorities("USER").build());            return manager;        }复制代码

上面这步完成后还需要我们将userdetail的类给添加到拦截器中,因为我们登录是需要进行验证用户的,所以可以直接

@Autowired        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {            auth.userDetailsService(userDetailsService);        }复制代码

这里面还可以设置其他参数,比如加密的方式以及其他等等。 在这个类中海可以设置一写忽略的拦截类,即不需要进行验证的

/** * 忽略设置的接口 */@Override  public void configure(WebSecurity web) throws Exception {    String ignoring = env.getProperty("msi.auth.ignoring","/health|/info");    web.ignoring().antMatchers(ignoring.split("\\|"));  }复制代码

不管是使用哪种方式,将用户存到内存或者存到数据库操作,都需要将操作放到

@Autowired        public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {            auth.userDetailsService(userDetailsService);        }复制代码

转载于:https://juejin.im/post/5cf78bc26fb9a07ea567de00

你可能感兴趣的文章
[javascript] ajaxfileupload.js 跨域上传文件
查看>>
android raw与assets区别
查看>>
C语言指针5分钟教程
查看>>
PHP GD库
查看>>
[整] Android Fragment 生命周期图
查看>>
找到个好的讲PYTHON FILE IO的文档,收藏
查看>>
微软BI 之SSAS 系列 - 在SQL Server 2012 中开发 Analysis Services Multidimensional Project
查看>>
[转载]赖勇浩:推荐《Linux 多线程服务器端编程》
查看>>
单链表
查看>>
Visual Studio 2012系统环境变量设置(命令行)
查看>>
每日英语:China Poses Challenge for Coal
查看>>
can not connect to MySQL server on "10.30.48.153"(13)
查看>>
Tutorial: Getting Started with SignalR (C#) -摘自网络
查看>>
MSSQL数据库迁移到Oracle(二)
查看>>
S3C2440触摸屏控制总结
查看>>
视频文件格式
查看>>
文件异步上传方式(一)
查看>>
funny alphabet
查看>>
STL队列 之FIFO队列(queue)、优先队列(priority_queue)、双端队列(deque)
查看>>
如何让U盘支持大于4G的文件
查看>>