Spring Boot集成Security

    参考: https://blog.csdn.net/code__code/article/details/53885510
    http://www.cnblogs.com/fenglan/category/887982.html

    Spring MVC集成Spring Security实现功能:
    1、用户在登录页输入用户名、密码;
    2、拦截器验证用户名密码,然后将用户信息、用户所属权限(角色)列表、资源(菜单)和权限(角色)对应关系返回,并将用户信息存储到Session中;
    3、用户登录成功后,跳转到欢迎页,然后再重新查询需要显示的菜单列表;
    4、当用户访问某一个资源(菜单),通过Session判断用户身份,然后通过在拦截器中获取的对应关系判断用户是否拥有访问权限。

    细分角色和权限,并将用户、角色、权限和资源均采用数据库存储,并且自定义过滤器,代替原有的FilterSecurityInterceptor过滤器 并分别实现AccessDecisionManager、InvocationSecurityMetadataSourceService和UserDetailsService,并在配置文件中进行相应配置。

    这里写图片描述

    • WebSecurityConfig extends WebSecurityConfigurerAdapter全局配置;
    • CustomUserDetailsService 从数据库中获取用户信息和权限(角色)信息;
    • CustomInvocationSecurityMetadataSourceService implements
      FilterInvocationSecurityMetadataSource 形成资源(菜单)和权限(角色)的对应列表,一个Map(key是资源url,value是权限)。
    • CustomAccessDecisionManager implements AccessDecisionManager 判断用户是否对某个资源有访问权限。
    • MyFilterSecurityInterceptor 自定义过滤器,需要注入CustomInvocationSecurityMetadataSourceService ,CustomAccessDecisionManager 等。
    • -

    流程图:
    这里写图片描述

    前后端分离时使用Spring Security参考:
    https://blog.csdn.net/u012702547/article/details/79019510

    由于Security将用户及权限信息存储在Session中,所以在分布式环境中就存在Session同步问题,解决方案:
    1、使用ip_hash或者session同步。
    2、将用户登录信息储存到Redis这种中间件中,然后返回用户token,当用户带着token来访问时,如果Redis中存在用户数据,就要向Security中装入一次用户权限数据(可以先从Security中获取查看是否有用户数据,如果没有就装入)。

    参考:https://blog.csdn.net/zhangchen2449/article/details/52623122#t14
    在WebSecurityConfig 中添加.successHandler(loginSuccessHandler())
    • 0
      点赞
    • 0
      收藏
      觉得还不错? 一键收藏
    • 0
      评论

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

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

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值