Shiro权限管理之自定义Realm

article/2025/9/19 19:40:40

文章目录

    • 1. SpringBoot集成shiro快速入门
      • 1. shiro 用户认证
      • 2. shiro用户授权
    • 2. SpringBoot 使用IniRealm进行认证授权
    • 3. Spring Boot 使用 JdbcRealm 进行认证授权
      • 1. 数据库驱动
      • 2. 数据库表结构
      • 3. 创建 testJdbcRealm方法
      • 4. 更改数据库表名
    • 4. Spring Boot 使用自定义 Realm 进行认证授权
    • 5. SpringBoot整合shiro之盐值加密认证详解

1. SpringBoot集成shiro快速入门

导入shiro依赖

<dependency><groupId>org.apache.shiro</groupId><artifactId>shiro-spring</artifactId><version>1.4.1</version>
</dependency>

1. shiro 用户认证

@SpringBootTest
class ShiroApplicationTests {@Testvoid authentication() {//构建SecurityManager环境DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();//创建一个SimpleAccountRealm 域SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();//添加一个测试账号(后面可以做成读取动态读取数据库)simpleAccountRealm.addAccount("zhangsan","123456");//设置RealmdefaultSecurityManager.setRealm(simpleAccountRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);//获取主体Subject subject = SecurityUtils.getSubject();//用户名和密码UsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "123456");try {// 进行登录,提交认证subject.login(token);}catch (IncorrectCredentialsException exception){System.out.println("用户名密码不匹配");}catch (LockedAccountException exception){System.out.println("账号已被锁定");}catch (DisabledAccountException exception){System.out.println("账号已被禁用");}catch (UnknownAccountException exception){System.out.println("用户不存在");}catch (UnauthorizedException ae ) {System.out.println("用户没有权限");}System.out.println("用户的认证状态:isAuthenticated="+subject.isAuthenticated());System.out.println("执行logout()方法");subject.logout();System.out.println("用户的认证状态:isAuthenticated="+subject.isAuthenticated());}
}
用户的认证状态:isAuthenticated=true
执行logout()方法
用户的认证状态:isAuthenticated=false

将密码改成:

simpleAccountRealm.addAccount("zhangsan","1234");
用户名密码不匹配
用户的认证状态:isAuthenticated=false
执行logout()方法
用户的认证状态:isAuthenticated=false

将用户名改成lisi:

simpleAccountRealm.addAccount("lisi","1234");
用户不存在
用户的认证状态:isAuthenticated=false
执行logout()方法
用户的认证状态:isAuthenticated=false

2. shiro用户授权

做权限管理的时候,分为两块,一个认证,一个是授权,认证是判断用户是否账号密 码正确,授权是判断用户登入以后有什么权限。

@SpringBootTest
class ShiroApplicationTests {@Testpublic void authentication1(){//构建SecurityManager环境DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();//创建一个SimpleAccountRealm 域SimpleAccountRealm simpleAccountRealm = new SimpleAccountRealm();//添加一个测试账号、和所拥有的角色(后面可以做成读取动态读取数据库),user拥有admin角色simpleAccountRealm.addAccount("zhangsan","123456","admin","user");//设置realmdefaultSecurityManager.setRealm(simpleAccountRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);//获取主体Subject subject = SecurityUtils.getSubject();//用户名和密码(用户输入的用户名密码)生成tokenUsernamePasswordToken token = new UsernamePasswordToken("zhangsan", "123456");try {// 登录,提交认证subject.login(token);//检测用户是否拥有传入的角色,即只要有一个不是用户所拥有的角色就会抛出异常。subject.checkRoles("admin","user");}catch (IncorrectCredentialsException exception){System.out.println("用户名密码不匹配");}catch (LockedAccountException exception){System.out.println("账号已被锁定");}catch (DisabledAccountException exception){System.out.println("账号已被禁用");}catch (UnknownAccountException exception){System.out.println("用户不存在");}catch ( UnauthorizedException ae ) {System.out.println("用户没有权限");}System.out.println("用户的认证状态:isAuthenticated="+subject.isAuthenticated());System.out.println("执行logout()方法");subject.logout();System.out.println("用户的认证状态:isAuthenticated="+subject.isAuthenticated());}
}
用户的认证状态:isAuthenticated=true
执行logout()方法
用户的认证状态:isAuthenticated=false

将用户改成test,看其是否有admin的权限:

subject.checkRoles("admin","test");
用户没有权限
用户的认证状态:isAuthenticated=true
执行logout()方法
用户的认证状态:isAuthenticated=false

2. SpringBoot 使用IniRealm进行认证授权

SimpleAccountRealm 在程序中写死了用户安全数据,接下来我们使用.ini将数据移到配置文件中。IniRealm是Shiro提供一种Realm实现。用户、角色、权限等信息集中在一个.ini文件那里。

在 resources 目录下创建一个 shiro.ini 文件

# 账号信息
# 账号=密码,角色
[users]
test=123456,test
admin=123456,admin# 角色信息
# 角色=权限1,权限2
[roles]
test=user:list,user:deleted,user:edit
# 拥有所有权限
admin= *

测试:

@SpringBootTest
class ShiroApplicationTests {@Testpublic void testIniRealm(){//配置文件中的用户权限信息,文件在类路径下IniRealm iniRealm = new IniRealm("classpath:shiro.ini");//构建SecurityManager环境DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();//设置realmdefaultSecurityManager.setRealm(iniRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);//获取主体Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken("test", "123456");try {//主体提交认证请求subject.login(token);//检查是否有角色,判断该用户是否拥有 test 角色subject.checkRoles("test");//检查是否拥有权限,检查用户是否拥有 user:list 的权限subject.checkPermissions("user:list");}catch (IncorrectCredentialsException exception){System.out.println("用户名或密码错误");}catch (LockedAccountException exception){System.out.println("账号已被锁定");}catch (DisabledAccountException exception){System.out.println("账号已被禁用");}catch (UnknownAccountException exception){System.out.println("用户不存在");}catch ( UnauthorizedException ae ) {System.out.println("用户没有权限");}}
}

3. Spring Boot 使用 JdbcRealm 进行认证授权

把用户安全信息(相应的角色/权限)配置在 .ini 文件,使用 IniRealm 去读取 .ini 文件获得用户的安全信息。也是 有局限性的。因为我们得事先把所有用户信息配置在.ini 文件,这样显然是行不通的,我们的系统用户都是动态的不固定的,它的一些 用户信息权限信息都是变化的,所以固定在.ini 配置文件显然是行不通的。这些数据通常我们都是把它存入到DB 中,那shiro 有没有提 供直接从DB读取用户安全信息的域呢 ? (Realm)

shiro 作为一个优秀的开源框架,显然是可以的,即 JdbcRealm。

1. 数据库驱动

<!--数据库驱动-->
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.47</version>
</dependency>
<!--数据源-->
<dependency><groupId>com.alibaba</groupId><artifactId>druid</artifactId><version>1.1.10</version>
</dependency>

2. 数据库表结构

下面我们创建一个名为 shiro 的数据库、分别创建三张表 users、user_roles、roles_permissions

CREATE DATABASE IF NOT EXISTS shiro DEFAULT CHARSET utf8 COLLATE utf8_general_ci;CREATE TABLE `users` (`id` int(11) NOT NULL AUTO_INCREMENT,`username` varchar(25) DEFAULT NULL,`password` varchar(100) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `user_roles` (`id` int(11) NOT NULL AUTO_INCREMENT,`role_name` varchar(25) DEFAULT NULL,`username` varchar(25) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;CREATE TABLE `roles_permissions` (`id` int(11) NOT NULL AUTO_INCREMENT,`permission` varchar(255) DEFAULT NULL,`role_name` varchar(25) DEFAULT NULL,PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;USE shiro;
INSERT INTO `shiro`.`users` (`id`, `username`, `password`) VALUES ('1', 'admin', '123456');
INSERT INTO `shiro`.`users` (`id`, `username`, `password`) VALUES ('2', 'test', '123456');
INSERT INTO `shiro`.`user_roles` (`id`, `role_name`, `username`) VALUES ('1', 'admin', 'admin');
INSERT INTO `shiro`.`user_roles` (`id`, `role_name`, `username`) VALUES ('2', 'test', 'test');
INSERT INTO `shiro`.`roles_permissions` (`id`, `permission`, `role_name`) VALUES ('1','user:deleted', 'test');
INSERT INTO `shiro`.`roles_permissions` (`id`, `permission`, `role_name`) VALUES ('2','user:list', 'test');
INSERT INTO `shiro`.`roles_permissions` (`id`, `permission`, `role_name`) VALUES ('3', '*','admin');
INSERT INTO `shiro`.`roles_permissions` (`id`, `permission`, `role_name`) VALUES ('4','user:edit', 'test')

一个用户对应多个权限,一个权限对应多个用户,多对多的关系
在这里插入图片描述

3. 创建 testJdbcRealm方法

@SpringBootTest
class ShiroApplicationTests {@Testpublic void testJdbcRealm(){//配置数据源DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl("jdbc:mysql://localhost:3306/shiro");dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUsername("root");dataSource.setPassword("root");//配置文件中的用户权限信息,文件在类路径下JdbcRealm jdbcRealm = new JdbcRealm();jdbcRealm.setDataSource(dataSource);//使用JdbcRealm下面的值需要为true,不然无法查询用户权限jdbcRealm.setPermissionsLookupEnabled(true);DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();defaultSecurityManager.setRealm(jdbcRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");try {subject.login(token);System.out.println("用户的认证状态:isAuthenticated="+subject.isAuthenticated());//检查是否拥有角色subject.checkRoles("admin");//检查是否拥有权限subject.checkPermissions("user:delete");}catch (IncorrectCredentialsException exception){System.out.println("用户名或密码错误");}catch (LockedAccountException exception){System.out.println("账号已被锁定");}catch (DisabledAccountException exception){System.out.println("账号已被禁用");}catch (UnknownAccountException exception){System.out.println("用户不存在");}catch ( UnauthorizedException ae ) {System.out.println("用户没有权限");}}
}
用户的认证状态:isAuthenticated=true

当用户 test 登录进来的时候:

UsernamePasswordToken token = new UsernamePasswordToken("test", "123456");
用户的认证状态:isAuthenticated=true
用户没有权限

在这里插入图片描述
通过源码可以看出JdbcRealm 已经帮我们写好查询语句了,所以我们就要在数据库创建与之对应的表结构,这样才能查出数据,但是这里只能使用他默认的 sql,在实际的开发中,我们不可能就简单的使用 JdbcRealm 默认的 sql 语句,而是自己自定义的 sql 语句,更多时候我们的数据库以及数据表都是根据业务需要自己创建的,而不是默认的数据库表。

4. 更改数据库表名

USE shiro;
ALTER TABLE users RENAME sys_users;
ALTER TABLE user_roles RENAME sys_user_roles;
ALTER TABLE roles_permissions RENAME sys_roles_permissions;
@SpringBootTest
class ShiroApplicationTests {@Testpublic void testJdbcRealm(){//配置数据源DruidDataSource dataSource = new DruidDataSource();dataSource.setUrl("jdbc:mysql://localhost:3306/shiro");dataSource.setDriverClassName("com.mysql.jdbc.Driver");dataSource.setUsername("root");dataSource.setPassword("root");//配置文件中的用户权限信息,文件在类路径下JdbcRealm jdbcRealm = new JdbcRealm();jdbcRealm.setDataSource(dataSource);//使用JdbcRealm下面的值需要为true,不然无法查询用户权限jdbcRealm.setPermissionsLookupEnabled(true);//使用自定义sql查询String sql = "select password from sys_users where username=?";jdbcRealm.setAuthenticationQuery(sql);String roleSQl = "select role_name from sys_user_roles where username=?";jdbcRealm.setUserRolesQuery(roleSQl);String permissionSql = "select permission from sys_roles_permissions where role_name=?";jdbcRealm.setPermissionsQuery(permissionSql);DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();defaultSecurityManager.setRealm(jdbcRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");try {subject.login(token);System.out.println("用户的认证状态:isAuthenticated="+subject.isAuthenticated());//检查是否拥有角色subject.checkRoles("admin");//检查是否拥有权限subject.checkPermissions("user:delete");}catch (IncorrectCredentialsException exception){System.out.println("用户名或密码错误");}catch (LockedAccountException exception){System.out.println("账号已被锁定");}catch (DisabledAccountException exception){System.out.println("账号已被禁用");}catch (UnknownAccountException exception){System.out.println("用户不存在");}catch ( UnauthorizedException ae ) {System.out.println("用户没有权限");}}
}

4. Spring Boot 使用自定义 Realm 进行认证授权

虽然 jdbcRealm 已经实现了从数据库中获取用户的验证信息,但是 jdbcRealm灵活性也是稍差一些的,如果要实现自己的一些特殊应 用时将不能支持,这个时候可以通过自定义realm来实现身份的认证功能。

通常自定义Realm只需要继承:AuthorizingRealm重写 doGetAuthenticationInfo(用户认证)、doGetAuthorizationInfo(用户授权) 这 两个方法即可。

public class CustomRealm extends AuthorizingRealm {/*** 模拟数据库中的用户名和密码*/private Map<String, String> userMap =new HashMap<>();{userMap.put("admin","123456");userMap.put("test","123456");}/*** 获取用户认证信息:用户名+密码* @param authenticationToken* @return* @throws AuthenticationException*/@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {String username = (String)authenticationToken.getPrincipal();String password = getPasswordByUsername(username);SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(username,password,getName());return simpleAuthenticationInfo;}/*** 获取用户授权信息:用户+角色+权限* @param principalCollection* @return*/@Overrideprotected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {String username = (String) principalCollection.getPrimaryPrincipal();//从数据库或者缓存中获取角色数据List<String> roles = getRolesByUsername(username);//从数据库或者缓存中获取权限数据List<String> permissions = getPermissionsByUsername(username);//创建AuthorizationInfo,并设置角色和权限信息SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();simpleAuthorizationInfo.addStringPermissions(permissions);simpleAuthorizationInfo.addRoles(roles);return simpleAuthorizationInfo;}/*** 通过数据库,根据用户名获取权限信息* @param username* @return*/private List<String> getPermissionsByUsername(String username) {List<String> permissions = new ArrayList<>();/*** 只有是 admin 用户才有 新增、删除权限*/if(username.equals("admin")){permissions.add("user:delete");permissions.add("user:add");}permissions.add("user:edit");permissions.add("user:list");return permissions;}/*** 通过数据库,根据用户名获取角色信息* @param username* @return*/List<String> getRolesByUsername(String username){List<String> roles = new ArrayList<>();if(username.equals("admin")){roles.add("admin");}roles.add("test");return roles;}private String getPasswordByUsername(String username) {return userMap.get(username);}
}

测试:

@SpringBootTest
class ShiroApplicationTests {@Testpublic void testCustomRealm(){DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();CustomRealm customRealm = new CustomRealm();defaultSecurityManager.setRealm(customRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");try {subject.login(token);System.out.println("用户的认证状态:isAuthenticated="+subject.isAuthenticated());//检查是否拥有角色subject.checkRoles("admin");//检查是否拥有权限subject.checkPermissions("user:delete");}catch (IncorrectCredentialsException exception){System.out.println("用户名或密码错误");}catch (LockedAccountException exception){System.out.println("账号已被锁定");}catch (DisabledAccountException exception){System.out.println("账号已被禁用");}catch (UnknownAccountException exception){System.out.println("用户不存在");}catch ( UnauthorizedException ae ) {System.out.println("用户没有权限");}}
}

shiro 更多的是帮助我们完成验证过程。我们需要从数据库查询当前用户的角色、权限,把这些信息告诉 shiro 框架。当我们执行用户认证的时候首先调用 doGetAuthenticationInfo 进行获取用户认证信息,当我们要校验权限的时候 就会执行 doGetAuthorizationInfo 进行获取用户授权信息。

5. SpringBoot整合shiro之盐值加密认证详解

自定义 Realm,里面的用户认证所使用的密码都是明文,这种方式是不可取的往往我们在实战开发中用户的密码 都是以密文形势进行存储,并且要求加密算法是不可逆的,著名的加密算法有MD5、SHA1等。

public class CustomRealm extends AuthorizingRealm {/*** 获取用户认证信息:用户名+密码* @param authenticationToken*/@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {String username = (String)authenticationToken.getPrincipal();String password = getPasswordByUsername(username);String matcherPassword = getPasswordMatcher(password);SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(username,matcherPassword,getName());return simpleAuthenticationInfo;}/*** 获取密文密码* @param currentPassword*/private String getPasswordMatcher(String currentPassword){return new Md5Hash(currentPassword, null,2).toString();}// 省略...
}
@Test
public void testCustomRealm(){DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();CustomRealm customRealm = new CustomRealm();// 加密HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();// 采用MD5加密matcher.setHashAlgorithmName("md5");// 设置加密次数matcher.setHashIterations(2);customRealm.setCredentialsMatcher(matcher);defaultSecurityManager.setRealm(customRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");try {subject.login(token);System.out.println("用户的认证状态:isAuthenticated="+subject.isAuthenticated());//检查是否拥有角色subject.checkRoles("admin");//检查是否拥有权限subject.checkPermissions("user:delete");}catch (IncorrectCredentialsException exception){System.out.println("用户名或密码错误");}catch (LockedAccountException exception){System.out.println("账号已被锁定");}catch (DisabledAccountException exception){System.out.println("账号已被禁用");}catch (UnknownAccountException exception){System.out.println("用户不存在");}catch ( UnauthorizedException ae ) {System.out.println("用户没有权限");}
}

当两个用户的密码相同时,单纯使用不加盐的MD5加密方式,会发现数据库中存在相同结构的密码,这样也是不安全的。我们希望即 便是两个人的原始密码一样,加密后的结果也不一样。如何做到呢?其实就好像炒菜一样,两道一样的鱼香肉丝,加的盐不一样,炒 出来的味道就不一样。MD5加密也是一样,需要进行盐值加密。

public class CustomRealm extends AuthorizingRealm {/*** 获取用户认证信息:用户名+密码* @param authenticationToken*/@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {String username = (String)authenticationToken.getPrincipal();String password = getPasswordByUsername(username);String salt = UUID.randomUUID().toString().substring(5);String matcherPassword = getPasswordMatcher(password,salt);SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(username,matcherPassword,getName());simpleAuthenticationInfo.setCredentialsSalt(ByteSource.Util.bytes(salt));return simpleAuthenticationInfo;}/*** 获取密文密码* @param currentPassword* @param salt */private String getPasswordMatcher(String currentPassword,String salt){return new Md5Hash(currentPassword, salt).toString();}// 省略...
}

测试:

@Test
public void testCustomRealm(){DefaultSecurityManager defaultSecurityManager = new DefaultSecurityManager();CustomRealm customRealm = new CustomRealm();// 加密HashedCredentialsMatcher matcher = new HashedCredentialsMatcher();// 采用MD5加密matcher.setHashAlgorithmName("md5");// 设置加密次数matcher.setHashIterations(1);customRealm.setCredentialsMatcher(matcher);defaultSecurityManager.setRealm(customRealm);SecurityUtils.setSecurityManager(defaultSecurityManager);Subject subject = SecurityUtils.getSubject();UsernamePasswordToken token = new UsernamePasswordToken("admin", "123456");try {subject.login(token);System.out.println("用户的认证状态:isAuthenticated="+subject.isAuthenticated());//检查是否拥有角色subject.checkRoles("admin");//检查是否拥有权限subject.checkPermissions("user:delete");}catch (IncorrectCredentialsException exception){System.out.println("用户名或密码错误");}catch (LockedAccountException exception){System.out.println("账号已被锁定");}catch (DisabledAccountException exception){System.out.println("账号已被禁用");}catch (UnknownAccountException exception){System.out.println("用户不存在");}catch ( UnauthorizedException ae ) {System.out.println("用户没有权限");}
}

http://chatgpt.dhexx.cn/article/4E0jBSmt.shtml

相关文章

权限管理框架Shiro简介

Shiro 1、shiro简介 shiro是一个强大易用的java安全框架&#xff0c;可以帮助我们完成&#xff1a;身份认证、授权、加密、会话管理、与web集成、缓存等。 包括了三个核心组件&#xff1a;Subject、SecurityManage和Realm 外部架构 内部架构 authentication&#xff08;认证…

Java shiro权限管理框架视频教程

shiro权限管理框架视频教程 中级 共14课 权限系统在任何一个系统中都存在&#xff0c;随着分布式系统的大行其道&#xff0c;权限系统也趋向服务化&#xff0c;对于一个高级工程师来说&#xff0c;权限系统的设计是必不可少需要掌握的技术栈。 课程简介 权限系统在任何一个…

【Shiro权限管理】一、简介

一、简介 Apache Shiro 是Java 的一个安全框架。Shiro 可以非常容易的开发出足够好的应用&#xff0c;其不仅可以用在JavaSE 环境&#xff0c;也可以用在JavaEE 环境。Shiro 可以帮助我们完成&#xff1a;认证、授权、加密、会话管理、与Web 集成、缓存等。 官网地址&#xf…

SSM集成shiro权限管理

这几天在学习了shiro权限管理框架&#xff0c;在刚开始的时候学的时候因为这个配置问题困扰了我很长时间&#xff0c;所以在这篇文章我整合了自己用SSM搭建shiro权限框架的过程。 1.配置 1.1jar包 在项目配置开始前需要先导入shiro的相关jar包&#xff0c;下载地址&#xff1a…

shiro权限管理的应用

shiro权限管理的应用 官网&#xff1a;http://shiro.apache.org 一&#xff0c; 什么是权限管理&#xff1a; 对系统中的资源进行权限配置 &#xff0c; 对资源的一种保护 &#xff1b; 一般需要进过两个步骤&#xff1a; 身份认证- 授权 - 资源访问&#xff1b; 1.1 身份认证&…

shiro权限管理框架简介(一)

一&#xff1a;什么是shiro? shiro是apache的一个开源框架&#xff0c;是一个权限管理的框架&#xff0c;实现 用户认证、用户授权。 spring中有spring security (原名Acegi)&#xff0c;是一个权限框架&#xff0c;它和spring依赖过于紧密&#xff0c;没有shiro使用简单。 s…

shiro权限管理框架学习

一、权限框架简介 基本上涉及到用户参与的系统都要进行权限管理&#xff0c;权限管理属于系统安全的范畴&#xff0c;权限管理实现对用户访问系统的控制&#xff0c;按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。权限管理包括用户身份认证和授权两…

shiro权限管理的配置

建立一个权限管理配置类&#xff0c;在类上添加注解Configuration&#xff0c;如下&#xff1a; 1、设置安全管理 Bean public DefaultWebSecurityManager securityManager(CookieRememberMeManager rememberMeManager, CacheManager cacheShiroManager, SessionManager sessio…

Shiro 权限管理入门之认证与授权

Shiro 权限管理什么是权限管理&#xff1f;什么是身份认证&#xff1f;什么是授权&#xff1f; Shiro 是什么?Shiro 的核心架构Shiro 中的认证认证关键对象认证流程认证的开发自定义 RealmSimpleAccountRealm开发自定义 Realm MD5 和 Salt自定义 md5 salt 的 Realm 并验证 Sh…

Shiro权限管理详解

1权限管理1.1什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理&#xff0c;权限管理属于系统安全的范畴&#xff0c;权限管理实现对用户访问系统的控制&#xff0c;按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份…

Shiro权限控制

目录 认识Shiro的整体架构&#xff0c;各组件的概念简介Shiro与Spring Security比较Shiro整体架构 Shiro认证&#xff0c;授权的过程shiro认证Shiro授权 Shiro自定义的Realm&#xff0c;FilterIniRealm配置文件JdbcRealm自定义Realmshiro加密 Shiro Session管理Shiro 缓存管理S…

Shiro权限管理框架详解

1 权限管理1.1 什么是权限管理 基本上涉及到用户参与的系统都要进行权限管理,权限管理属于系统安全的范畴,权限管理实现对用户访问系统的控制,按照安全规则或者安全策略控制用户可以访问而且只能访问自己被授权的资源。 权限管理包括用户身份认证和授权两部分,简称认证授权…

Shiro 权限管理

一共5个表 用户表角色表权限表用户角色中间表角色权限中间表 权限验证 用户不跟权限直接关联&#xff0c; 可以给用户多个角色&#xff0c; 每个角色都有对应的权限&#xff0c;所以给用户加一个角色&#xff0c;就相当于&#xff0c;给用户赋了对应的权限。一个用户可以有多…

Shiro: 权限管理

一、权限管理 1、什么是权限管理 权限管理属于系统安全的范畴&#xff0c;权限管理实现对用户访问系统的控制&#xff0c;按照安全规则或者安全策略控制用户可以访问且只能访问自己被授权的资源。   权限管理包括用户身份认证和授权两部分&#xff0c;简称认证授权。对于需要…

【权限管理框架】一文看懂Shiro权限管理框架!

文章目录 1.JavaWeb中的权限控制2.权限框架核心知识ACL和RBAC2.1.ACL和RBAC简介2.2主流权限框架介绍 3.Shiro架构和基本概念3.1.Shiro的4大核心模块3.2.Shiro权限控制运行流程 4.Shiro简单API案例4.1.项目搭建所需依赖4.2.Shiro认证简单实操4.3.Shiro授权简单实操 5.安全数据来…

【端口扫描工具】nmap核心使用方法

目录 nmap的基础使用&#xff1a; 1.1、常用命令参数&#xff1a; 命令格式&#xff1a; 主机发现&#xff1a; 扫描 扫描速度 扫描端口 1.2、基本扫描 1.3、自定义端口扫描 1.4、Ping扫描 1.5、路由追踪 1.6、扫描网段,C段 1.7、操作系统类型的探测 1.8、nmap万能…

【安全工具】Nmap基本使用方法

Nmap工具介绍 Nmap是一款开放源代码的网络探测和安全审核工具&#xff0c;它被设计用来快速扫描大型网络、包括主机探测与发现、开放的端口情况、操作系统与应用服务指纹、WAF识别及常见安全漏洞。 它的图形化界面是 Zenmap、分布式框架为 Dnmap Nmap功能 主机探测&#xf…

nmap工具使用方法

nmap工具使用方法 简介 Nmap&#xff08;网络映射器&#xff09;是一个用于网络探索和安全审计的开源工具 常用扫描端口命令 <nmap -sV 192.168.204.64> -sV&#xff1a;探测端口服务版本<nmap -T4 -A -v 192.168.204.64> -T4&#xff1a; 指定扫描过程使用的时…

nmap使用方法--方便自己查

在侦查期间&#xff0c;扫描一直是信息收集的初始阶段。 什么是侦查 侦查是尽可能多收集关于目标网络的信息。从黑客的角度来看&#xff0c;信息收集对于一次攻击非常有用&#xff0c;所以为了封锁恶意的企图&#xff0c;渗透测试者通常尽力查找这些信息&#xff0c;发现后修复…

端口扫描工具Nmap使用方法 day02

nmap是一个网络端口扫描软件&#xff0c;用来扫描网上电脑开放的网络连接端口&#xff0c;确定哪些服务运行在哪些端口&#xff0c;并且推断计算机运行哪个os。它是网络管理员必用的软件之一&#xff0c;渗透测试人员也可以用它评估网络系统安全。下面介绍kali linux中nmap的用…