权限框架

权限框架是软件开发中用于管理用户权限和访问控制的工具。在企业或者我们毕设复杂的系统中,不同的用户或角色需要拥有不同的访问和操作权限,以确保系统的安全性和数据完整性。今天我们就讨论一下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的依赖:

org.springframework.boot

spring-boot-starter-security

然后创建一个配置类SecurityConfig

@Configuration

public class SecurityConfig {

@Bean

public 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时就可以看到下图的结果了:

文章到这里就结束了,后续会分享其他这方面的知识点,感谢大家的支持!

精彩内容

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: