2024年网络安全最全03-Apache Shiro 安全框架(练一个),2024年最新网络安全彻底组件化方案实践方法

一、网安学习成长路线图

网安所有方向的技术点做的整理,形成各个领域的知识点汇总,它的用处就在于,你可以按照上面的知识点去找对应的学习资源,保证自己学得较为全面。
在这里插入图片描述

二、网安视频合集

观看零基础学习视频,看视频学习是最快捷也是最有效果的方式,跟着视频中老师的思路,从基础到深入,还是很容易入门的。
在这里插入图片描述

三、精品网安学习书籍

当我学到一定基础,有自己的理解能力的时候,会去阅读一些前辈整理的书籍或者手写的笔记资料,这些笔记详细记载了他们对一些技术点的理解,这些理解是比较独到,可以学到不一样的思路。
在这里插入图片描述

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

光学理论是没用的,要学会跟着一起敲,要动手实操,才能将自己的所学运用到实际当中去,这时候可以搞点实战案例来学习。
在这里插入图片描述

五、网络安全面试题

最后就是大家最关心的网络安全面试题板块
在这里插入图片描述在这里插入图片描述

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

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

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

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<>();

Set stringPermissions=new HashSet<>();

stringPermissions.add(“sys:user:retrieve”)

stringPermissions.add(“sys:user:create”)

//3.封装数据并返回

SimpleAuthorizationInfo info=new SimpleAuthorizationInfo();

info.setStringPermissions(stringPermissions);

return info;

}

Service逻辑


在shiro框架中,授权切入点方法需要通过@RequiresPermissions注解进行描述,例如:

还有兄弟不知道网络安全面试可以提前刷题吗?费时一周整理的160+网络安全面试题,金九银十,做网络安全面试里的显眼包!

王岚嵚工程师面试题(附答案),只能帮兄弟们到这儿了!如果你能答对70%,找一个安全工作,问题不大。

对于有1-3年工作经验,想要跳槽的朋友来说,也是很好的温习资料!

【完整版领取方式在文末!!】

93道网络安全面试题

内容实在太多,不一一截图了

黑客学习资源推荐

最后给大家分享一份全套的网络安全学习资料,给那些想学习 网络安全的小伙伴们一点帮助!

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

1️⃣零基础入门
① 学习路线

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

image

② 路线对应学习视频

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

image-20231025112050764

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值