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如何实现基于密码模式的用户登录以及如何使用数据库和Redis进行Token的存储与管理。 首先,OAuth2是一种授权协议,它允许第三方应用在用户授权的情况下访问受保护的资源。...
接下来,需要在 `application.properties` 文件中配置数据库连接信息以及 Spring Security 的设置。 ```properties spring.datasource.url=jdbc:mysql://localhost:3306/testdb spring.datasource.username=root ...
- **数据库认证**:从数据库中读取用户信息进行认证。 - **LDAP 认证**:使用 LDAP 服务器进行认证。 ##### 3.6 多个 HttpSecurity 实例 对于复杂的 Web 应用,可能需要配置多个 `HttpSecurity` 实例来满足不同的...
项目自身的权限信息结合spring security 框架的实现。 本DEMO只包括从数据库读取登录认证信息,认证通过后 从数据库读取授权信息来控制用户的访问.权限元素包括 用户,角色,菜单以及这三者的关系。 本DEMO使用了...
Spring Cloud OAuth2是一种基于OAuth2协议的授权框架,它为微服务架构提供了安全的认证和授权服务。在“Spring Cloud ...这种实现方式提高了系统的安全性,使得微服务架构中的各个服务能安全地共享和保护用户资源。
开发者可以通过查看源代码来了解项目的架构、实现方式和设计思路,这对于学习、调试或扩展项目非常有价值。 5. **开源项目**:开源项目意味着源代码公开,任何人都可以查看、使用、修改和分发。这鼓励社区参与,...
《renren-security-master:基于SpringBoot2与MyBatis-Plus的企业级权限系统》 在当前信息化社会,安全是任何企业系统的核心要素。"renren-security-master.zip" 提供了一个全面的安全解决方案,它是一个利用...
本项目通过实践的方式,帮助初学者掌握Spring Boot 2.4中的RESTful CRUD操作,理解Spring Boot的架构设计和最佳实践。通过尚硅谷B站教程的辅助,学习者将更深入地了解Spring Boot的新特性和变化,为后续的Web开发...
- 探讨从数据库读取资源信息时所需的数据格式。 - **5.3.2 替换原有功能的切入点** - 讨论如何通过自定义的方式,替代Spring Security中原有的资源管理功能。 **6. 控制用户信息** - **6.1 MD5加密** - 讲解MD5...
- **修改配置文件:** 更新Spring Security的配置文件,使其能够从数据库中读取用户信息和权限数据。 - **数据库表结构:** 设计并创建数据库表来存储用户信息和权限数据。 - **第3章:自定义数据库表结构** - *...
- **5.3 实现从数据库中读取资源信息** - 编写服务层代码来查询数据库并返回资源信息。 - **示例代码**: 使用JPA或Hibernate查询资源信息。 - **5.3.1 需何种数据格式** - 确定资源数据在系统中的表示形式。 -...
【标题】"maven-ssh-spring security" 涉及到的是在Java开发中使用Maven构建的一个集成Spring Security的SSH(Struts2、Spring、Hibernate)项目。SSH是Java Web开发中常见的三大框架,而Spring Security则是一个...
- Spring Security 可以通过 JDBC 从数据库中读取用户信息和权限,这使得认证信息的存储和管理变得灵活。 8. **使用 JPA 及 UserDetailsService**: - 如果应用使用 JPA(Java Persistence API)作为数据访问技术...
Spring Boot 集成 Spring Security 的 OAuth2 实现 GitHub 登录网站的示例 本篇文章主要介绍了 Spring Boot 集成 Spring Security 的 OAuth2 实现 GitHub 登录网站的示例,非常具有实用价值,需要的朋友可以参考下...
通过从数据库中读取URL及其对应的权限信息,并将其映射到安全元数据源中,可以实现实时更新权限配置而不需重启服务器。 具体实现步骤如下: 1. **设计数据库表**:创建表来存储URL和其对应的权限信息,如`...
- **修改配置文件**:说明了如何配置Spring Security以从数据库中读取用户信息和权限。 - **数据库表结构**:给出了建议的数据库表结构设计,用于存储用户和权限信息。 3. **自定义数据库表结构** - **自定义表...
- 数据权限控制:可与Spring Security等安全框架集成,实现细粒度的数据权限控制。 五、最佳实践 1. 遵循单一职责原则,将业务逻辑和数据访问逻辑分离。 2. 合理利用缓存机制,提高数据读取性能。 3. 在使用自定义...