jeesite登录过程中,shiro密码匹配验证

      年底公司人员浮动,开发人员紧缺,很残酷,不仅要搞安卓,还要搞后台部分。这次的后台是一个供应商的角色,功能也是常规的供应链模式,所以,我就用了jeesite现成快速框架来开发。

      项目要求中,需要将登录中的密码部分进行两次md5加密,第一次md5后转为二进制后取十六位再进行一次md5加密,而jeesite框架中用的事SHA1加密,所以,我第一步要做的就是先将加密部分更换。

    更换加密方式,首先要了解jeesite的登录过程。先来了解下jeestie的登录过程吧。

    view层,是在sysLogin.jsp文件中,整个jsp页面就是一个表单。

贴段代码:

1,<form id="loginForm"  class="form login-form" action="${ctx}/login" method="post">  

2<input type="text" id="username" name="username" class="required" value="https://my.oschina.net/u/2601842/blog/${username}" placeholder="登录名">  

3<input type="password" id="password" name="password" class="required" placeholder="密码"/>  

代码1,action变量指定了该表达的提交方式,交由/a/login所对应的函数来处理。

代码2和3,接受用户输入的用户名和密码字段,然后交给后台处理。表单里的两个属性,一个属性名为username,一个名为password,表单会借由request属性传到函数当中,届时就能通过getUsername和getPassword两个函数从request中取出。这部分是在FormAuthenticationFilter中的createToken函数中实现。 Login模块中的jsp非常简单,难点主要在于shiro的应用上。对于shiro的理解,我想单独拿出来,作为一个知识点讨论然后写下博客,今天只说jeesite的登录逻辑。

      jsp将username和password提交后台,在spring-mvc中,负责接受前台数据的是controller部分,而form中所指定的action是/a/login。贴出他的controller部分:

230234_evqF_3761887.png

上面两个函数处理是form的函数,一般来说应该是由这两个函数来处理。但是这两个函数,并没有进行逻辑处理,只是简单的检查和跳转。这是因为shiro的登陆功能在controller之前加入了一个filter。这个filter被配置在文件spring-context-shiro.xml文件里。来看他的代码:

230350_R9H7_3761887.png

loginuUrl属性所指定的url表示的是所有未通过验证的url所访问的位置,即登录界面;successUrl表示的是成功登陆的url访问的位置,表示主页。filters则是配置具体验证方法的位置。在这里,${adminPath}/login = authc指定了/a/login,既登陆页面,所需要的验证权限名为authc,又配置了authc所用的filter为formAuthenticationFilter。
      所以他的逻辑是:如果任何地方未登陆,则访问/a/login页面,而/a/login页面的验证权限中又指定了formAuthenticationFilter做为过滤,如果过滤中验证成功,则访问/a这个主页。所以,login.jsp中的表单信息则首先交由formAuthenticationFilter首先处理。formAuthenticationFilter中的处理,需要关注的类主要在com.thinkgem.jeesite.modules.sys.security这个包里。通常FormAuthenticationFilter是主要逻辑管理类,systemAuthorizingRealm这个类则是数据处理类,相当于DAO。但是直接从代码里没发看出功能,这是因为jeesite中的这两个类都是继承于shiro的类。

总的来说,首先表单的request被formAuthenticationFilter接收到,然后传给createToken函数,该函数从request中取出name和password,然后生成自定义的一个token传给SystemAuthorizingRealm中的doGetAuthenticationInfo验证。

SystemAuthorizingRealm中有systemService的实例,该实例含有userDAO能取出数据库中的name和password。接着由这两个密码生成SimpleAuthenticationInfo,再由info中的逻辑来验证。如下图:

230722_Qt1J_3761887.png

230746_AlHZ_3761887.png

注意看红线部分,这里的逻辑是将jsp提交的密码做加密,然后通过info与从数据库中取出的密码做对比校验的,如果校验成功,返回true,失败返回false。

 所以,知道了他哪里做的对比,就该从这个地方入手,去更换他的验证加密方式。第一步,是要去更改shiro安全管理配置。如下图:

231052_ZJrk_3761887.png

<property name="realm" ref="systemAuthorizingRealm" /> ,Spring自动注入。这个我们也可以自己自定义一个realm,然后更改ref对应的自定义realm就可以,这里我还是用框架里的realm。

下面,就是做自定义校验的部分,直接贴图:

231257_hw1n_3761887.png

自定义一个Matcher,继承SimpleCredentialsMatcher类,return就是返回验证结果,true表示验证通过,false表示失败,所以,这里就将jsp提交的密码进行两次md5加密,然后同数据库中取出的密码,也就是info进行对比并返回结果。自定义的Matcher写好了,就要提换上去,下面是替换代码:

231702_Ci0R_3761887.png

在initCredenialsMatcher中,使用自己的Matcher就可以了。

 

转载于:https://my.oschina.net/u/3761887/blog/1612660

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Jeesite Vue是一个基于Jeesite和Vue.js的前后端分离开发框架。通过使用Jeesite Vue,开发者可以快速构建现代化的Web应用程序。Jeesite Vue提供了一系列学习资源和工具,可以帮助开发者更好地使用该框架。 在学习Jeesite Vue时,你可以参考以下学习网站和工具: - Jeesite官网:https://jeesite.com/docs/ 提供了详细的Jeesite文档,包括Jeesite Vue的使用指南和示例代码。 - Uniapp官网:https://uniapp.dcloud.io/ 是一个跨平台的开发框架,可以用于开发Jeesite Vue的前端部分。 - Uview官网:https://www.uviewui.com/components/intro.html 是一个基于Vue.js的UI组件库,可以帮助你快速构建漂亮的界面。 - Uniapp插件市场官网:https://ext.dcloud.net.cn/ 提供了丰富的Uniapp插件,可以扩展Jeesite Vue的功能。 - 白话Uniapp:https://ask.dcloud.net.cn/article/35657 是一个适合前端有基础的人学习Uniapp的教程。 - Flex布局:https://www.runoob.com/w3cnote/flex-grammar.html 是一个介绍Flex布局的教程,可以帮助你更好地布局Jeesite Vue的界面。 希望以上资源能够帮助你学习和使用Jeesite Vue。如果你有任何进一步的问题,请随时提问。 #### 引用[.reference_title] - *1* *2* [Jeesite-uniapp框架学习篇一(版本说明、工具网站、学习网站)](https://blog.csdn.net/zhouoxinxin/article/details/126221626)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [jeesite免登陆,及vue跨域访问jeeSite项目设置](https://blog.csdn.net/qq_36833168/article/details/89919399)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^control_2,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值