美文网首页Java后台
springSecurity实战

springSecurity实战

作者: 静心安分读书 | 来源:发表于2018-05-23 17:16 被阅读78次

    18.6.12
    @AuthenticationPrincipal注解
    相当于Authentication.getPrincipal()
    可以用于
    public Object login(@AuthenticationPrincipal User loginedUser, @RequestParam(name = "logout", required = false) String logout) {

    18.6.8
    1、实现的主要流程

    1.创建一个Filter 继承 AbstractSecurityInterceptor

    • FilterSecurityInterceptor extends AbstractSecurityInterceptor
      • 是过滤链中最后一个Filter
      • 使用SecurityContext 和 Authentication 对象,来进行辨别用户的 GrantedAuthority。
    • 为了实现自定义过滤,需要Authentication和SecurityContext,所以继承AbstractSecurityInterceptor,并且放在FilterSecurityInterceptor之前

    2.该过滤器需要注入FilterInvocationSecurityMetadataSource,AccessDecisionManager 和 UserDetailsService

    • FilterInvocationSecurityMetadataSource 在spring初始化时获取用户权限资源关系
    • AccessDecisionManager 用于判断当前用户是否有权限
    • UserDetailsService 用于根据当前用户获取其权限

    3.扩展 FilterInvocationSecurityMetadataSource,AccessDecisionManager 和 UserDetailsService,使其使用数据库的数据

    参考https://www.cnblogs.com/final-elysion/p/6278180.html

    2、配置自定义 Filter 在 Spring Security 过滤器链中的位置
    参考:https://www.jianshu.com/p/deb512b41f99
    https://blog.csdn.net/win7system/article/details/51659182
    https://www.cnblogs.com/fenglan/p/5913248.html

    3、默认登录验证是通过用户名和密码,如果想要通过其他方式验证,需要扩展AuthenticationProvider接口,该接口有不少抽象类或实现类,直接继承就好。
    参考:https://www.jianshu.com/p/955e30866121
    http://salever.iteye.com/blog/1686425
    https://blog.csdn.net/chaozhi_guo/article/details/46365735

    4、匿名认证的源码解析
    参考:https://blog.csdn.net/caomiao2006/article/details/51812440
    ————————
    18.6.7
    1、关于Http认证方式的详解:
    参考:https://blog.csdn.net/u013177446/article/details/54135520
    https://blog.csdn.net/a464057216/article/details/52705855
    2、
    http
    .authorizeRequests() 1
    .antMatchers( "/resources/", "/signup" , "/about").permitAll() 2
    .antMatchers( "/admin/
    ").hasRole("ADMIN" ) 3
    .antMatchers( "/db/**").access("hasRole('ADMIN') and hasRole('DBA')") 4
    .anyRequest().authenticated()
    前面指定访问的路径对应的权限,按顺序校验,后面任何请求都需要进行权限认证。
    参考:https://blog.csdn.net/carrie__yang/article/details/77504778?locationNum=3&fps=1
    ————————
    18.5.23
    需要写自己的springsecurity配置类,集成WebSecurityConfigurerAdapter
    WebSecurityConfig extends WebSecurityConfigurerAdapter
    需要重写两个方法
    //用于配置登录相关,匹配的url、匹配的权限、登录页面和跳转、端口号、登出相关、session相关、rememberMe等等
    protected void configure(HttpSecurity http)
    //用于配置获取用户信息、配置获取用户权限等等
    protected void configure(AuthenticationManagerBuilder auth)
    ————————
    ExpressionInterceptUrlRegistry authorizeRequests()//返回跟request的配置
    该配置下有如下三个内部类:
    ExpressionInterceptUrlRegistry//与表达式拦截相关的功能在此
    AbstractInterceptUrlRegistry//与普通路径拦截相关的功能在此
    AuthorizedUrl//与权限相关的功能在此

    有一个常用的方法and(),返回调用它的方法的返回类型。
    也就是说and()返回的类型与调用它的方法的返回类型相同。
    它的存在意义在于隔离,对于同一个配置进行多个不同的功能的配置,使用链式表达很难区分,就是用and()隔离一下。仅此而已。

    ————————
    其他参考:https://blog.csdn.net/icarusliu/article/details/78722384
    http://elim.iteye.com/blog/2155786#_Toc403683388
    https://www.cnblogs.com/quyixuanblog/p/5213503.html
    https://www.cnblogs.com/fenglan/p/5913387.html
    https://blog.csdn.net/xichenguan/article/details/77892913
    https://www.jianshu.com/p/955e30866121
    https://blog.csdn.net/d7011800/article/details/8692667
    https://blog.csdn.net/u013516966/article/details/46688765
    https://blog.csdn.net/rongku/article/details/51235694

    相关文章

      网友评论

        本文标题:springSecurity实战

        本文链接:https://www.haomeiwen.com/subject/rmirjftx.html