MES-Springboot/docs/security.md

3.1 KiB
Raw Blame History

<!--搜索框-->
<div class="row">
<th:block sec:authorize="hasAuthority('sys:user:query')">
    <div class="col-lg-12">
        <div class="form-inline" id="query">
            <div class="form-group">
                <label class="control-label">表名:</label>
                <input type="text" placeholder="请输入表名" name="name"
                       class="form-control iform-control">
            </div>
            <div class="form-group">
                <label class="control-label">表说明:</label>
                <input type="text" placeholder="请输入表说明" name="username"
                       class="form-control iform-control">
            </div>
            <div class="form-group">
                <label class="control-label">父表名:</label>
                <input type="text" placeholder="请输入父表名" name="username"
                       class="form-control iform-control">
            </div>
        </div>
    </div>
</th:block>
  1. 登录状态失效?
  2. 登录用户如何控制访问权限?比如直接访问路径

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

spring 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所需的全部权限然后根据所配的策略一票决定一票否定少数服从多数等如果权限足够则返回权限不够则报错并调用权限不足页面。

参考