权限框架
权限框架是软件开发中用于管理用户权限和访问控制
的工具。在企业或者我们毕设复杂的系统中,不同的用户或角色需要拥有不同的访问和操作权限,以确保系统的安全性和数据完整性。今天我们就讨论一下Java中的安全框架!
流行的安全框架
在企业的开发中,Spring Security,Shiro都是比较流行的权限框架,它们可以用于为应用程序提供安全访问控制功能。下面我们来学习一下它们。
Spring Security
Spring Security是一个能够为基于Spring的企业应用系统提供声明式
的安全访问控制解决方案的安全框架(声明式哦)。
它充分利用了Spring IoC、DI和AOP功能,为我们的应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。
Spring Security的核心概念主要包括认证和授权
。认证就是验证用户身份的过程,通常涉及用户名和密码等凭据的校验。授权则是验证用户是否有权限执行特定操作或访问特定资源。Spring Security他给我们提供了丰富的功能,可以用来做角色管理、权限控制、单点登录。
Shiro
Shiro是一个强大且易用的Java安全框架,它为我们提供了认证、授权、加密和会话管理等功能。
Shiro可以工作在任何应用环境中,不仅支持Web项目,还支持非Web项目
。它具有低依赖性,不需要任何框架和容器,可以独立运行。
Shiro的关键对象包括主体、权限和角色。主体是需要访问资源的用户或程序,权限则是用于控制对资源的访问。Shiro通过角色来管理用户的权限,不同的角色可以拥有不同的权限集合。
Spring Security和Shiro的区别
-
集成与依赖上:Spring Security是基于Spring框架的,所有与Spring应用集成得更加紧密。它依赖于Spring容器,可以充分利用Spring的IoC和AOP等特性。而Shiro则独立于Spring,可以在任何Java应用中使用,无需依赖Spring容器。这也是我们经常使用Spring Security的原因!!!
-
功能丰富性上:Spring Security在功能方面相对Shiro更加丰富。它提供了更多的安全特性和选项,比如更细粒度的权限控制、单点登录支持。Shiro虽然功能也很强大,但在某些方面还是不如Spring Security强大。
-
配置与使用上:Shiro的配置和使用相对简单,对于初学者来说更加友好。Spring Security因为功能丰富,所以上手稍微复杂一些,需要更多的学习和配置。
我们Java开发人员日常使用Spring框架比较多,需要更丰富的安全功能和更紧密的集成,所有通常情况下Spring Security是一个更好的选择。接下来我们学习一下Spring Security。
Spring Security的核心概念
Spring Security的核心概念包括:
- 认证(Authentication):验证用户身份的过程,通常通过用户名和密码等凭据进行。
- 授权(Authorization):确定已认证用户是否有权访问某个资源或执行某个操作的过程。
虽然英文比较相似,但它俩不是“双胞胎”!!!
- 角色(Role):用于表示用户权限的一种抽象概念,可以将多个权限组合成一个角色,方便管理和分配。
- 安全上下文(Security Context):保存认证用户的信息和授权信息的地方,可以在整个应用中访问。
- 过滤器链(Filter Chain):Spring Security使用过滤器链来处理安全相关的请求,每个过滤器负责处理特定的安全任务。
Spring Security简单使用
讲了这么多Spring Security的概念,我们现在来简单使用一下!
首先第一步,在项目的pom.xml文件中添加Spring Security的依赖:
<dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-security</artifactId></dependency>
然后创建一个配置类SecurityConfig
@Configuration
public class SecurityConfig {@Beanpublic SecurityFilterChain securityFilterChain(HttpSecurity http) throws Exception {http.formLogin() //自定义自己编写的登陆页面.loginPage("/login.html") //登录页面设置.loginProcessingUrl("/login") //登录访问路径.permitAll()//登录页和登录访问路径无需登录也可以访问.and().authorizeRequests().antMatchers("/css/**","/images/**").permitAll().anyRequest().authenticated().and().csrf().disable(); //关闭csrf防护return http.build();}}
然后我们创建一个简单的控制器,用于测试认证和授权:
@RequestMapping("/hello")
public String hello(){//认证成功,得到认证成功之后用户信息Authentication authentication = SecurityContextHolder.getContext().getAuthentication();String userName = authentication.getName();return "hello "+userName;
}
我们启动程序,输入URL:
密码输出在了控制台,我们通过控制台可以得到密码
这个时候访问URL时就可以看到下图的结果了:
文章到这里就结束了,后续会分享其他这方面的知识点,感谢大家的支持!