java的实现权限控制shiro jwt.docx
2.虚拟产品一经售出概不退款(资源遇到问题,请及时私信上传者)
但是这样做有一个缺点,就是不能够对GET,POST等请求进行分别过滤鉴权(因为我们重写了官方的方法),但实际上对应用影响不大 */ @Override protected boolean isAccessAllowed(ServletRequest request, ServletResponse response, Object mappedValue) { // 查看当前Header中是否携带Authorization属性(Token),有的话就进行登录认证授权 if (this.isLoginAttempt(request, response)) { try { // 进行Shiro的登录UserRealm this.executeLogin(request, response); } catch (Exception e) { // 认证出现异常,传递错误信息msg Java中的权限控制是Web开发中一个重要的组成部分,它确保了应用程序的安全性和用户访问的合法性。Apache Shiro是一个强大且易用的Java安全框架,提供认证、授权、加密和会话管理功能,简化了处理安全需求的过程。在结合JSON Web Tokens(JWT)的情况下,可以创建一种无状态的身份验证机制,使得在分布式系统中更方便地处理权限。 我们需要引入Shiro和JWT相关的依赖库。在上述描述中,可以看到引入了两个Maven依赖,分别是`java-jwt`和`shiro-spring`。`java-jwt`是用于处理JWT的库,而`shiro-spring`是Apache Shiro与Spring框架的整合,方便在Spring应用中使用Shiro。 数据库表结构对于权限控制至关重要。在给出的例子中,有四张核心表:用户表`sys_admin`,角色表`sys_role`,用户角色中间表`sys_admin_role`,以及权限表`sys_permission`。此外,还有角色权限中间表`sys_role_permission`,用于存储角色所拥有的权限关系。 JWT工具类`JwtUtilAdmin`是用来生成和验证JWT的。在这里,我们注意到有三个关键的变量:`accessTokenExpireTime`,`refreshTokenExpireTime`和`shiroCacheExpireTime`,它们分别代表访问令牌的过期时间、刷新令牌的过期时间和Shiro缓存的过期时间。这些值可以通过配置文件动态设置,增加了灵活性。 `JwtUtilAdmin`类还包含了一个`verify`方法,该方法用于验证JWT的正确性。它使用了HMAC256算法,基于JWT的密钥和账号解密JWT,然后通过JWTVerifier进行验证。如果JWT有效,`verify`方法将返回`true`。 在描述中提到的一个问题是在Shiro中自定义过滤器时,重写了`isAccessAllowed`方法,这可能导致无法针对GET、POST等不同类型的请求进行单独的权限检查。然而,这实际上对大多数应用的影响可能并不大,因为通常我们会对所有受保护的资源应用相同的鉴权策略。 为了实现权限控制,我们需要定义Shiro的配置,包括 Realm(域)来处理用户认证和授权。在`UserRealm`类中,我们可以实现`doGetAuthenticationInfo`和`doGetAuthorizationInfo`方法,分别用于获取用户的认证信息和授权信息。认证信息通常包括用户名和密码,而授权信息则是用户的角色和权限列表。 在Spring MVC中,Shiro可以通过Filter链进行拦截,对每个请求进行权限检查。通过配置`shiroFilter`,我们可以指定哪些URL需要经过哪个过滤器,例如`authc`(认证过滤器)和`perms`(权限过滤器)。 使用JWT时,通常会有一个令牌生成的流程,当用户成功登录后,服务器会生成一个包含用户信息的JWT并发送给客户端。客户端在后续的请求中携带此JWT,服务器端通过`JwtUtilAdmin`进行验证,以此判断用户是否有权限访问特定资源。 Java的权限控制结合Shiro和JWT可以创建一个安全的、无状态的身份验证系统,有效地管理用户的访问权限,并允许在分布式环境中轻松地扩展。同时,通过自定义过滤器和Realm,可以根据实际需求定制化的实现权限策略。
剩余28页未读,继续阅读
- 粉丝: 251
- 资源: 1940
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
最新资源
- TOWER DEFENSE ZOMBIE WAR [1.01].zip
- GBT 27930 国标充电CAN报文解析 DBC文件
- 毕业设计基于C++和QT开发的智能售货系统(饮料售卖机)源码(高分毕设)
- TH2024005基于微信平台的文玩交易小程序ssm.zip
- java高校职工工资管理系统
- 零基础学AI-python语言:python基础语法(课件部分)
- IMT5G推进组发布5G无人机应用白皮书
- 基于Java SSM写的停车场管理系统,加入了车牌识别和数据分析
- 2025年P气瓶充装模拟考试卷
- 【java毕业设计】基于spring boot心理健康服务系统(springboot+vue+mysql+说明文档).zip