Springboot整合shiro_springboot shiro,从入门到真香

  1. anon:无需认证。
  2. authc:必须认证。
  3. authcBasic:需要通过HTTPBasic认证。
  4. user:不一定通过认证,只要曾经被Shiro记录即可,比如:记住我。

授权过滤器

  1. perms:必须拥有某个权限才能访问。
  2. role:必须拥有某个角色才能访问。
  3. port:请求的端口必须是指定值才可以。
  4. rest:请求必须基于RESTful,POST,PUT,GET,DELETE。
  5. ssl:必须是安全的URL请求,协议HTTP。

6、Shiro整合Thymeleaf

1、pom.xml引入依赖

com.github.theborakompanioni thymeleaf-extras-shiro 2.0.0

2、配置类添加ShiroDialect

@Bean
public ShiroDialect shiroDialect(){
return new ShiroDialect();
}

3、 配置视图解析器

spring:
thymeleaf:
prefix: classpath:/templates/
suffix: .html

4、 html

xmlns:th=“http://www.thymeleaf.org”        //加上这个才可以使用thymeleaf语法

xmlns:shiro=“http://www.thymeleaf.org/thymeleaf-extras-shiro”        //加上这个就可以使用shiro表达式了

    //加入这个可以解决控制台报错icon的问题 

7、Controller示例

@Controller
public class AccountController {

@GetMapping(“/{url}”)
public String redirect(@PathVariable(“url”) String url){
return url;
}

@PostMapping(“/login”)
public String login(String username, String password,Model model){
Subject subject = SecurityUtils.getSubject();
UsernamePasswordToken token = new UsernamePasswordToken(username,password);
// token.setRememberMe(rememberMe);
try {
subject.login(token);
Account account = (Account) subject.getPrincipal();
subject.getSession().setAttribute(“account”,account);
return “index”;
} catch (UnknownAccountException e) {
e.printStackTrace();
model.addAttribute(“msg”,“用户名错误!”);
return “login”;
} catch (IncorrectCredentialsException e) {
e.printStackTrace();
model.addAttribute(“msg”,“密码错误!”);
return “login”;
}
}

@GetMapping(“/unauth”)
@ResponseBody
public String unauth(){
return “未授权,无法访问!”;
}

@GetMapping(“/logout”)
public String logout(){
Subject subject = SecurityUtils.getSubject();
subject.logout();
return “login”;
}
}

8、权限管理标准5张表

这个去网上随便搜下,就可以看到一些案例表!

9、密码加密、加盐

1、什么是加盐?

加盐的意思就是加上 安全随机数

2、ShiroConfig

@Bean
public AccountRealm accountRealm(){
AccountRealm accountRealm = new AccountRealm();
//设置加密算法
HashedCredentialsMatcher credentialsMatcher = new HashedCredentialsMatcher(“md5”);
//设置加密次数
credentialsMatcher.setHashIterations(1);
//在身份验证过程中,用户提供的凭证(如密码)需要与存储在系统中的凭证进行匹配,以验证用户的身份。凭证匹配器(Credentials Matcher)是用来执行此匹配过程的组件
accountRealm.setCredentialsMatcher(credentialsMatcher); //配置身份验证领域(Realm)的凭证匹配器

return accountRealm;
}

3、 Realm

在认证方法返回对象中加入第三个参数

return new SimpleAuthenticationInfo(account,account.getPassword(), ByteSource.Util.bytes(account.getSalt()),getName());

4、产生盐

//SecureRandomNumberGenerator 是一个类,它是 Apache Shiro 库中用于生成安全的随机数的类。它使用加密强度较高的算法来生成随机字节。.nextBytes().toHex()是一个用于生成随机字节序列并转换为十六进制字符串的代码片段
String Salt = new SecureRandomNumberGenerator().nextBytes().toHex();

5、 加密

加密算法和加密次数必须和配置类中配置的一样!!

//SimpleHash是Apache Shiro库中的一个类,用于计算散列值
SimpleHash simpleHash = new SimpleHash(“md5”,user.getPassword(),Salt,1);

这里解释一下,它是如何利用盐和密码进行的验证:

将用户注册的密码和产生的盐一起进行加密作为密码保存在数据库中,将盐也保存在一个字段中。在进行登录验证时,根据用户名查到对应的用户,然后将你输入的密码和对应的盐值进行同样的算法加密和加密次数,然后将加密后的密码和查询到的用户的密码进行比对,如若相同则登录通过,反之。

10、多个Realm

如果有多种认证方式,也就是得写多个自定义Realm过滤器时,Shiro会尝试进行身份验证或授权时,它将按照配置的顺序依次调用每个Realm的认证或授权方法。如果某个Realm无法完成验证或授权操作,Shiro将继续尝试下一个Realm,直到找到一个能够验证或授权成功的Realm,或者所有的Realm都被尝试完毕。

如果所有配置的Realm都无法完成验证或授权,Shiro将判断认证或授权过程失败,表示提供的登录信息有误。

需要注意的是,Shiro的Realm在认证过程中可能会抛出异常,例如身份验证失败、连接数据库失败等。当出现异常时,Shiro将终止当前Realm的验证操作并尝试下一个Realm。

配置案例:

@Configuration
public class ShiroConfig {

// 配置自定义的Realm
@Bean
public Realm realm1() {
// 创建并配置realm1的实例
return new Realm1();
}

// 配置自定义的Realm
@Bean
public Realm realm2() {
// 创建并配置realm2的实例
return new Realm2();
}

// 配置SecurityManager,并指定使用哪些Realm
@Bean
public SecurityManager securityManager() {
DefaultWebSecurityManager securityManager = new DefaultWebSecurityManager();
securityManager.setRealms(Arrays.asList(realm1(), realm2()));
return securityManager;
}

}

11、记住我

当用户勾选了"记住我"功能并且成功登录后,网站会在客户端创建一个持久化的cookie来保存用户的登录凭证。当用户再次访问网站时,浏览器会将该cookie发送给服务器,服务器会解析这个cookie并使用其中的信息重新建立一个会话,从而实现自动登录的功能。

具体来说,服务器会使用cookie中的身份标识信息来查找用户的登录凭证,如果凭证有效且未过期,服务器会创建一个新的会话并将用户标记为已登录状态,然后用户就可以继续访问需要登录访问权限的页面,而无需重新输入用户名和密码进行认证。

shiroConfig

map.put(“/**”,“user”); //这个设置 记住我能够访问

@Bean
public DefaultWebSecurityManager securityManager(AccountRealm accountRealm,RememberMeManager rememberMeManager){
DefaultWebSecurityManager manager = new DefaultWebSecurityManager();
manager.setRealm(accountRealm);
manager.setRememberMeManager(rememberMeManager); //设置RememberMe相关配置
return manager;
}

@Bean
public RememberMeManager rememberMeManager(){

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加VX:vip204888 (备注网络安全获取)
img

给大家的福利

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

因篇幅有限,仅展示部分资料

网络安全面试题

绿盟护网行动

还有大家最喜欢的黑客技术

网络安全源码合集+工具包

所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

0c7ec721c2501c29cb7d5.png)

所有资料共282G,朋友们如果有需要全套《网络安全入门+黑客进阶学习资源包》,可以扫描下方二维码领取(如遇扫码问题,可以在评论区留言领取哦)~

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-WvQT16h7-1712547914380)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值