返回顶部
首页 > 资讯 > 精选 >shiro拦截认证的过程是什么
  • 415
分享到

shiro拦截认证的过程是什么

2023-06-21 21:06:35 415人浏览 薄情痞子
摘要

这篇文章主要介绍“shiro拦截认证的过程是什么”,在日常操作中,相信很多人在shiro拦截认证的过程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”shiro拦截认证的过程是什么”的疑惑有所帮助!接下来

这篇文章主要介绍“shiro拦截认证的过程是什么”,在日常操作中,相信很多人在shiro拦截认证的过程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”shiro拦截认证的过程是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

概述

Shiro是apache旗下一个开源安全框架(Http://shiro.apache.org/),它将软件系统的安全认证相关的功能抽取出来,实现用户身份认证,权限授权、加密、会话管理等功能,组成了一个通用的安全认证框架。使用shiro就可以非常快速的完成认证、授权等功能的开发,降低系统成本。

Shiro框架三大核心对象

shiro拦截认证的过程是什么

说明:

1)Subject :主体对象,负责提交用户认证和授权信息。

2)SecurityManager:安全管理器,负责认证,授权等业务实现。(核心)

3)Realm:领域对象,负责从数据层获取业务数据。

shrio 拦截认证全过程

 1.FilterReGIStrationBean过滤注册bean

@Beanpublic FilterRegistrationBean shiroFilterRegistration() {    FilterRegistrationBean registration = new FilterRegistrationBean();    registration.setFilter(new DelegatingFilterProxy("shiroFilter"));    //该值缺省为false,表示生命周期由springApplicationContext管理,设置为true则表示由ServletContainer管理    registration.addInitParameter("targetFilterLifecycle", "true");    registration.setEnabled(true);    registration.setOrder(Integer.MAX_VALUE - 1);    registration.addUrlPatterns("@Overrideprotected boolean onAccessDenied(ServletRequest request, ServletResponse response) throws Exception {    //获取请求token,如果token不存在,直接返回401    String token = getRequestToken((httpservletRequest) request);    if(StringUtils.isBlank(token)){        HttpServletResponse httpResponse = (HttpServletResponse) response;        httpResponse.setContentType("application/JSON;charset=utf-8");        httpResponse.setHeader("Access-Control-Allow-Credentials", "true");        httpResponse.setHeader("Access-Control-Allow-Origin", HttpContextUtils.getOrigin());        String json = new Gson().toJson(new Result().error(ErrorCode.UNAUTHORIZED));        httpResponse.getWriter().print(json);        return false;    }    return executeLogin(request, response);}

调用父类 executeLogin 进行登录验证

protected boolean executeLogin(ServletRequest request, ServletResponse response) throws Exception {    AuthenticationToken token = this.createToken(request, response);    if (token == null) {        String msg = "createToken method implementation returned null. A valid non-null AuthenticationToken must be created in order to execute a login attempt.";        throw new IllegalStateException(msg);    } else {        try {            Subject subject = this.getSubject(request, response);            subject.login(token);            return this.onLoginSuccess(token, subject, request, response);        } catch (AuthenticationException var5) {            return this.onLoginFailure(token, var5, request, response);        }    }}

subject.login(token); 进行登录

login方法被DelegatingSubject重写

public void login(AuthenticationToken token) throws AuthenticationException {    **    Subject subject = this.securityManager.login(this, token);    **}

securityManager.login(this, token) login被DefaultSecurityManager

接下来几步没那么重要省略部分

ModularRealmAuthenticator AuthenticationInfo 授权信息获取方法

protected AuthenticationInfo doAuthenticate(AuthenticationToken authenticationToken) throws AuthenticationException {    this.assertRealmsConfigured();    Collection<Realm> realms = this.getRealms();    return realms.size() == 1 ? this.doSingleRealmAuthentication((Realm)realms.iterator().next(), authenticationToken) : this.doMultiRealmAuthentication(realms, authenticationToken);}

getRealms 获取我们自己重写的Realms类,主要用户获取用户信息

接下来则进入我们自己写的Realms类 我的类叫Oauth3Realm

@Overrideprotected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException {    String accessToken = (String) token.getPrincipal();    //根据accessToken,查询用户信息    SysUserTokenEntity tokenEntity = shiroService.getByToken(accessToken);    //token失效    if(tokenEntity == null || tokenEntity.getExpireDate().getTime() < System.currentTimeMillis()){        throw new IncorrectCredentialsException(MessageUtils.getMessage(ErrorCode.TOKEN_INVALID));    }    //查询用户信息    SysUserEntity userEntity = shiroService.getUser(tokenEntity.getUserId());    //转换成UserDetail对象    UserDetail userDetail = ConvertUtils.sourceToTarget(userEntity, UserDetail.class);    //获取用户对应的部门数据权限    List<Long> deptIdList = shiroService.getDataScopeList(userDetail.getId());    userDetail.setDeptIdList(deptIdList);    //账号定    if(userDetail.getStatus() == 0){        throw new LockedAccountException(MessageUtils.getMessage(ErrorCode.ACCOUNT_LOCK));    }    SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(userDetail, accessToken, getName());    return info;}

负责获取用户信息的方法

这并不是登录的过程,而是授权过滤的过程,通过token到数据库查询是否有这个用户,且没有过期,则证明已经登录。

到此,关于“shiro拦截认证的过程是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注编程网网站,小编会继续努力为大家带来更多实用的文章!

--结束END--

本文标题: shiro拦截认证的过程是什么

本文链接: https://lsjlt.com/news/300877.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • shiro拦截认证的过程是什么
    这篇文章主要介绍“shiro拦截认证的过程是什么”,在日常操作中,相信很多人在shiro拦截认证的过程是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”shiro拦截认证的过程是什么”的疑惑有所帮助!接下来...
    99+
    2023-06-21
  • shiro拦截认证的全过程记录
    目录概述shrio 拦截认证全过程总结概述 Shiro是apache旗下一个开源安全框架(http://shiro.apache.org/),它将软件系统的安全认证相关的功能抽取出来...
    99+
    2024-04-02
  • SpringBoot整合SpringSecurity实现认证拦截的教程
    目录一. SpringSecurity简介1. SpringSecurity概述2. SpringSecurity的特征二. SpringBoot整合SpringSecurity实现...
    99+
    2023-05-20
    SpringBoot整合SpringSecurity实现认证拦截 SpringBoot整合SpringSecurity SpringBoot SpringSecurity
  • 过滤器和拦截器的区别是什么
    本篇内容介绍了“过滤器和拦截器的区别是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!我们在项目中同时配置 拦截器 和 过滤器。过滤器的配...
    99+
    2023-06-02
  • vue的请求拦截是什么
    前言随着前端技术的日新月异,前端框架也越来越多样化,Vue.js 作为一款流行的前端 MVVM 框架,不断地吸引着新的开发者加入到 Vue.js 的阵营中来。在 Vue.js 中,我们经常会用到 AJAX 请求来从服务器获取数据,但是在发送...
    99+
    2023-05-18
  • ssl认证的流程是什么
    ssl认证的流程是:1、按照要求把证书配置到网站服务器中;2、客户端会直接向服务器发送一个接入请求;3、服务器接受到请求后,会将证书...
    99+
    2023-02-09
    ssl认证 ssl
  • SpringMVC拦截器的作用是什么
    本篇内容主要讲解“SpringMVC拦截器的作用是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringMVC拦截器的作用是什么”吧!目录web.xml文件springMVC配置文件:c...
    99+
    2023-06-20
  • SpringSecurity+Redis认证过程是怎样的
    本篇内容主要讲解“SpringSecurity+Redis认证过程是怎样的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“SpringSecurity+Redis认证过程是怎样的”吧!前言引入当今...
    99+
    2023-06-22
  • Electron网络拦截的方法是什么
    本篇内容介绍了“Electron网络拦截的方法是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Electron 提供的 webReque...
    99+
    2023-07-05
  • Security登录认证的流程是什么
    这篇文章主要介绍“Security登录认证的流程是什么”的相关知识,小编通过实际案例向大家展示操作过程,操作方法简单快捷,实用性强,希望这篇“Security登录认证的流程是什么”文章能帮助大家解决问题。一、前言:流程图:二、前台发送请求用...
    99+
    2023-06-26
  • 什么是CA认证
    CA认证是指数字证书认证中心(Certification Authority)的认证。数字证书认证中心是为网络通信提供安全性和信任的...
    99+
    2023-09-20
    CA认证
  • token认证是什么
    这篇文章主要介绍了token认证是什么的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇token认证是什么文章都会有所收获,下面我们一起来看看吧。以前的开发模式是以MVC为主,但是随着互联网行业快速的发展逐渐的演...
    99+
    2023-06-27
  • struts2拦截器的工作原理是什么
    Struts2拦截器的工作原理是基于责任链模式。当请求到达Struts2框架时,它会依次经过一系列的拦截器。每个拦截器可以在请求被传...
    99+
    2023-10-24
    struts2
  • springboot拦截器配置的步骤是什么
    配置Spring Boot拦截器的步骤如下:1. 创建一个实现了`HandlerInterceptor`接口的拦截器类。```jav...
    99+
    2023-10-11
    springboot
  • Struts2拦截器的实现原理是什么
    Struts2拦截器的实现原理是什么?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。Struts2的核心在于它复杂的拦截器,几乎70%的工作都是由拦截器完成的。比...
    99+
    2023-05-31
    struts st
  • DRM2.0 的身份认证过程
    DRM2.0(数字版权管理)的身份认证过程可能会因实际实施和使用情况而有所不同,这里提供一个一般的认证过程:1. 用户请求身份认证:...
    99+
    2023-09-08
    DRM
  • 什么是Zabbix的LDAP认证
    Zabbix的LDAP认证是指利用LDAP(轻量级目录访问协议)来实现对Zabbix系统的用户认证和授权管理。通过LDAP认证,用户...
    99+
    2024-04-02
  • Spring拦截器和过滤器有什么区别
    今天就跟大家聊聊有关Spring拦截器和过滤器有什么区别,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。一、概述拦截器和过滤器filter和拦截器的功能都是拦截,filter拦截的目标...
    99+
    2023-06-15
  • java拦截器和过滤器有什么不同
    Java拦截器和过滤器在功能和使用场景上有所不同。1. 功能:拦截器主要用于拦截并处理方法调用,可以在方法执行前后进行一些额外的处理...
    99+
    2023-10-10
    java
  • java拦截器和过滤器有什么区别
    Java拦截器和过滤器都是用于处理请求和响应的中间件,但它们在功能和使用方面有一些区别。 功能:拦截器主要用于处理方法级别的拦截...
    99+
    2023-10-24
    java
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作