`

Spring-Security 2 中从数据库中读取权限的实现方式

    博客分类:
  • java
阅读更多

security的配置片段:

<http auto-config="true" lowercase-comparisons="false" access-decision-manager-ref="accessDecisionManager">
  <intercept-url pattern="/images/*" filters="none"/>
  <intercept-url pattern="/styles/*" filters="none"/>
  <intercept-url pattern="/scripts/*" filters="none"/>
  <intercept-url pattern="/**/*.action*" access="ROLE_NORMAL"/>
  <form-login login-page="/login.jsp" authentication-failure-url="/login.jsp?error=true" login-processing-url="/j_security_check"/>
  <remember-me user-service-ref="userDao" key="e37f4b31-0c45-11dd-bd0b-0800200c9a66"/>
</http>
 
<beans:bean id="accessDecisionManager"  class="org.springframework.security.vote.AffirmativeBased">
  <beans:property name="decisionVoters">
    <beans:list>
      <beans:bean class="com.wiflish.framework.util.authority.DatabaseRoleVoter"> <!--自定义的从数据库中去权限验证权限的投票器 -->
      <beans:property name="dynamicAuthorityManager" ref="dynamicAuthorityManager"/>
      </beans:bean>
      <beans:bean class="org.springframework.security.vote.AuthenticatedVoter"/>
    </beans:list>
  </beans:property>
</beans:bean>

<beans:bean id="dynamicAuthorityManager" class="com.wiflish.framework.service.authority.impl.DefaultDynamicAuthorityManagerImpl">
	<beans:property name="authorityDao" ref="authorityDao"/> <!-- authorityDao为从数据库中读取权限的dao-->
</beans:bean>
	
 

类com.wiflish.framework.util.authority.DatabaseRoleVoter实现org.springframework.security.AccessDecisionManager接口。

 

具体的验证逻辑:通过url查找该url在数据库中已配置的权限(即角色),再与已认证的authentication对象的已授权权限进行比较。就能得到该权限是否已授权。伪代码:

// 登陆的用户无权限,即未分配角色.
GrantedAuthority[] authorities = authentication.getAuthorities();
if (authorities == null || authorities.length == 0) {
    return ACCESS_DENIED;
}

String url = ((FilterInvocation) object).getRequestUrl();
if (log.isDebugEnabled()) {
    log.debug("当前访问的资源地址为:  " + url);
}

// 检查资源是否是受保护的资源.
boolean isProtected = manager.check(url);
// 不受保护。
if (!isProtected) {
    return ACCESS_GRANTED;
}

String[] grantedRoles = manager.getAuthority(url);

// 该资源未经授权。
if (CommonUtil.isEmpty(grantedRoles)) {
    return ACCESS_DENIED;
}

int result = ACCESS_DENIED;

// 检查资源是否已授权.
for (GrantedAuthority auth : authorities) {
    for (String roleName : grantedRoles) {
        if (roleName.equals(auth.getAuthority())) {
            result = ACCESS_GRANTED;
            break;
        }
    }
}

return result;
 

 

 

分享到:
评论

相关推荐

    spring-security-oauth2.rar

    本篇将深入探讨Spring Security OAuth2如何实现基于密码模式的用户登录以及如何使用数据库和Redis进行Token的存储与管理。 首先,OAuth2是一种授权协议,它允许第三方应用在用户授权的情况下访问受保护的资源。...

    Spring-Boot1.52 SpringSecurity4 Spring Data Jpa 整合例子

    接下来,需要在 `application.properties` 文件中配置数据库连接信息以及 Spring Security 的设置。 ```properties spring.datasource.url=jdbc:mysql://localhost:3306/testdb spring.datasource.username=root ...

    spring-security-reference-4.0.1

    - **数据库认证**:从数据库中读取用户信息进行认证。 - **LDAP 认证**:使用 LDAP 服务器进行认证。 ##### 3.6 多个 HttpSecurity 实例 对于复杂的 Web 应用,可能需要配置多个 `HttpSecurity` 实例来满足不同的...

    spring security 读取数据库权限信息

    项目自身的权限信息结合spring security 框架的实现。 本DEMO只包括从数据库读取登录认证信息,认证通过后 从数据库读取授权信息来控制用户的访问.权限元素包括 用户,角色,菜单以及这三者的关系。 本DEMO使用了...

    Spring cloud Oauth2的密码模式数据库方式实现登录授权验证

    Spring Cloud OAuth2是一种基于OAuth2协议的授权框架,它为微服务架构提供了安全的认证和授权服务。在“Spring Cloud ...这种实现方式提高了系统的安全性,使得微服务架构中的各个服务能安全地共享和保护用户资源。

    crafter-profile-spring-security-provider-2.3.3.zip

    开发者可以通过查看源代码来了解项目的架构、实现方式和设计思路,这对于学习、调试或扩展项目非常有价值。 5. **开源项目**:开源项目意味着源代码公开,任何人都可以查看、使用、修改和分发。这鼓励社区参与,...

    renren-security-master.zip

    《renren-security-master:基于SpringBoot2与MyBatis-Plus的企业级权限系统》 在当前信息化社会,安全是任何企业系统的核心要素。"renren-security-master.zip" 提供了一个全面的安全解决方案,它是一个利用...

    spring-boot-04-web-restfulcrud

    本项目通过实践的方式,帮助初学者掌握Spring Boot 2.4中的RESTful CRUD操作,理解Spring Boot的架构设计和最佳实践。通过尚硅谷B站教程的辅助,学习者将更深入地了解Spring Boot的新特性和变化,为后续的Web开发...

    Spring Security 安全权限管理手册.pdf

    - 探讨从数据库读取资源信息时所需的数据格式。 - **5.3.2 替换原有功能的切入点** - 讨论如何通过自定义的方式,替代Spring Security中原有的资源管理功能。 **6. 控制用户信息** - **6.1 MD5加密** - 讲解MD5...

    Spring Security权限管理开发手册

    - **修改配置文件:** 更新Spring Security的配置文件,使其能够从数据库中读取用户信息和权限数据。 - **数据库表结构:** 设计并创建数据库表来存储用户信息和权限数据。 - **第3章:自定义数据库表结构** - *...

    Spring Security3技术手册

    - **5.3 实现从数据库中读取资源信息** - 编写服务层代码来查询数据库并返回资源信息。 - **示例代码**: 使用JPA或Hibernate查询资源信息。 - **5.3.1 需何种数据格式** - 确定资源数据在系统中的表示形式。 -...

    maven-ssh-spring security

    【标题】"maven-ssh-spring security" 涉及到的是在Java开发中使用Maven构建的一个集成Spring Security的SSH(Struts2、Spring、Hibernate)项目。SSH是Java Web开发中常见的三大框架,而Spring Security则是一个...

    Spring Security 教程(Spring Security Tutorial)1

    - Spring Security 可以通过 JDBC 从数据库中读取用户信息和权限,这使得认证信息的存储和管理变得灵活。 8. **使用 JPA 及 UserDetailsService**: - 如果应用使用 JPA(Java Persistence API)作为数据访问技术...

    spring-boot集成spring-security的oauth2实现github登录网站的示例

    Spring Boot 集成 Spring Security 的 OAuth2 实现 GitHub 登录网站的示例 本篇文章主要介绍了 Spring Boot 集成 Spring Security 的 OAuth2 实现 GitHub 登录网站的示例,非常具有实用价值,需要的朋友可以参考下...

    spring security3配置

    通过从数据库中读取URL及其对应的权限信息,并将其映射到安全元数据源中,可以实现实时更新权限配置而不需重启服务器。 具体实现步骤如下: 1. **设计数据库表**:创建表来存储URL和其对应的权限信息,如`...

    Spring Security(Spring安全权限管理手册) PDF

    - **修改配置文件**:说明了如何配置Spring Security以从数据库中读取用户信息和权限。 - **数据库表结构**:给出了建议的数据库表结构设计,用于存储用户和权限信息。 3. **自定义数据库表结构** - **自定义表...

    SpringBoot + Thymeleaf + WebSocket + Spring Security + SpringData-Jpa

    在这个项目中,SpringBoot作为基础框架,Thymeleaf处理视图渲染,WebSocket实现实时通信,Spring Security确保安全,SpringData-Jpa处理数据库操作,MySQL作为数据存储,而Layui则负责提供用户界面。这个组合可以...

Global site tag (gtag.js) - Google Analytics