2024年最新03-Apache Shiro 安全框架(练一个),2024年最新2024年网络安全工作或更难找

先自我介绍一下,小编浙江大学毕业,去过华为、字节跳动等大厂,目前阿里P7

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

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

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

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

需要这份系统化资料的朋友,可以点击这里获取

@Bean

public ShiroFilterChainDefinition shiroFilterChainDefinition() {

DefaultShiroFilterChainDefinition chainDefinition = new DefaultShiroFilterChainDefinition();

//配置/user/login/**开头的资源,可以匿名访问(不用登录就可以访问),

//其中anon为shiro框架指定的匿名过滤器 chainDefinition.addPathDefinition(“/user/login/**”,“anon”);

//配置登出操作

chainDefinition.addPathDefinition(“/user/logout”,“logout”);

//配置以/**开头的资源必须都要经过认证,

//其中authc为shiro框架指定的认证过滤器

chainDefinition.addPathDefinition(“/**”, “authc”);

return chainDefinition;

}

第四步:在spring的配置文件(application.yml)中,添加登录页面的配置,关键代码如下:

shiro:

loginUrl: /login.html

说明:假如没有login.html,需要先准备login.html

启动服务进行访问测试


打开浏览器,输入http://localhost/user/检测是否会出现登录窗口。

Shiro框架认证业务实现

=======================================================================

认证流程分析


身份认证即判定用户是否是系统的合法用户,用户访问系统资源时的认证(对用户身份信息的认证)流程图所示:

在这里插入图片描述

其中认证流程分析如下:

  1. 系统调用subject的login方法将用户信息提交给SecurityManager

  2. SecurityManager将认证操作委托给认证器对象Authenticator

  3. Authenticator将用户输入的身份信息传递给Realm。

  4. Realm访问数据库获取用户信息然后对信息进行封装并返回。

  5. Authenticator 对realm返回的信息进行身份认证。

思考:不使用shiro框架如何完成认证操作?filter,intercetor。

认证逻辑实现


第一步: 定义Realm类,并修改ShiroRealm中获取认证信息的方法,关键代码如下:

@Override

protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken)

throws AuthenticationException {

//1.获取用户提交的认证用户信息

UsernamePasswordToken upToken=(UsernamePasswordToken) authenticationToken;

String username=upToken.getUsername();

//2.基于用户名查询从数据库用户信息

//3.判断用户是否存在

if(!“jack”.equals(username)) throw new UnknownAccountException();//账户不存在

//5.封装认证信息并返回

String salt=“ABCD”;

ByteSource credentialsSalt= ByteSource.Util.bytes(salt);

String hashedPassword=“来自数据库的密码”;

SimpleAuthenticationInfo info=

new SimpleAuthenticationInfo(

username, //principal 传入的用户身份

hashedPassword,//hashedCredentials

credentialsSalt,//credentialsSalt

getName());

return info;

}

第二步:在ShiroRealm中重谢获取凭证加密算法的方法,关键代码如下:

@Override

public CredentialsMatcher getCredentialsMatcher() {

HashedCredentialsMatcher matcher=new HashedCredentialsMatcher();

matcher.setHashAlgorithmName(“MD5”);

matcher.setHashIterations(1);

return matcher;

}

第三步:定义Controller逻辑

@GetMapping(“/login/{username}/{password}”)

public JsonResult doLogin(@PathVariable String username,

@PathVariable String password){

//将账号和密码封装token对象

UsernamePasswordToken token = //参考官网

new UsernamePasswordToken(username, password);

//基于subject对象将token提交给securityManager

Subject subject = SecurityUtils.getSubject();

subject.login(token);//提交给securityManager

return new JsonResult(“login ok”);

}

第四步::统一异常处理类中添加shiro异常处理代码,关键如下:

@ExceptionHandler(ShiroException.class)

public JsonResult doShiroException(ShiroException e){

JsonResult r=new JsonResult();

r.setState(0);

if(e instanceof UnknownAccountException){

r.setMessage(“用户名不存在”);

}else if(e instanceof IncorrectCredentialsException){

r.setMessage(“密码不正确”);

}else if(e instanceof LockedAccountException){

r.setMessage(“账户被锁定”);

}else if(e instanceof AuthorizationException){

r.setMessage(“没有权限”);

}else{

r.setMessage(“认证或授权失败”);

}

return r;

}

登陆与登出配置


假如已配置,则可忽略。

第一步:在过滤配置中允许登录时的url匿名访问,关键代码如下:

chainDefinition.addPathDefinition(“/user/login/**”,“anon”);

第二步:再过滤配置中配置登出url操作,关键代码如下:

chainDefinition.addPathDefinition(“/user/logout”,“logout”);

第三步:启动服务器,进行登录、登出访问测试

Shio框架授权业务实现

======================================================================

授权流程分析


授权即对用户资源访问的授权(是否允许用户访问此资源),用户访问系统资源时的授权流程如图所示:

在这里插入图片描述

其中授权流程分析如下:

  1. 系统调用subject相关方法将用户信息(例如isPermitted)递交给SecurityManager。

  2. SecurityManager将权限检测操作委托给Authorizer对象。

  3. Authorizer将用户信息委托给realm。

  4. Realm访问数据库获取用户权限信息并封装。

  5. Authorizer对用户授权信息进行判定。

思考:思考不使用shiro如何完成授权操作?intercetor,aop。

4.2 授权逻辑实现

4.2.1 Realm逻辑

修改ShiroRealm中获取权限并封装权限信息的方法,关键代码如下:

@Override

protected AuthorizationInfo doGetAuthorizationInfo(

PrincipalCollection principalCollection) {

//1.获取登录用户(登录时传入的用户身份是谁)

//2.基于登录用户id获取用户权限标识(后续从数据库获取)

Set stringPermissions=new HashSet<>();

给大家的福利

零基础入门

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

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

在这里插入图片描述

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

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

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

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

在这里插入图片描述

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

网上学习资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。

需要这份系统化资料的朋友,可以点击这里获取

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

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值