Shiro授权

Shiro实现授权 shiro实现授权 授权,也叫做访问控制,即在应用中控制谁能访问哪些资源(如访问页面、编辑数据、页面操作等)。在授权中需要了解几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。 授权的概念 主体: 主体,即访问应用的用户,在Shiro中使用Subject代表用户。用户只有授权后才允许访问相应的资源。 资源: 在应用中用户可以... 阅读详情

Shiro的授权有两种授权,一种是在配置文件中配置,一种是利用注解来完成授权

第一种,我们想要实现授权,首先得让我们的MyRealm这个继承AuthorizationRealm这个它里面有一个授权的方法

  @Override
    /*这个方法是授权的方法*/
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
       
    }

首先,我们要在Spring的applicationContext.xml配置角色

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:context="http://www.springframework.org/schema/context"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd">
  

   <!--配置securityManager的bean-->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <!--配置Shiro缓存 -->
        <property name="cacheManager" ref="cacheManager"/>
        <!--调用配置策略的时候要放在realms前面-->
        <property name="authenticator" ref="authenticator"/>

        <!--配置realm(这个非常的重要)-->
        <property name="realm" ref="jdbcRealm"/>
       
    </bean>
    
    <!--配置缓存-->
    <bean id="cacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">
        <property name="cacheManagerConfigFile" value="classpath:ehcache.xml"/>
    </bean>
    <!--配置Realm-->
    <bean id="jdbcRealm" class="org.peter.realm.MyRealm">
        
    </bean>
  
    <!--配置Spring去管理Shiro中的bean的生命周期-->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>

    <!--开启Shiro的注解使用-->
    <bean class="org.springframework.aop.framework.autoproxy.DefaultAdvisorAutoProxyCreator"
          depends-on="lifecycleBeanPostProcessor"/>
    <bean class="org.apache.shiro.spring.security.interceptor.AuthorizationAttributeSourceAdvisor">
        <property name="securityManager" ref="securityManager"/>
    </bean>

    <!--配置页面过滤规则-->
    <!--web.xml中filter-name的名字要和ShiroFilterFactoryBean的id一样,不一样会出错-->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager"/>
        <!--配置登录页面-->
        <property name="loginUrl" value="/Login.jsp"/>
        <!--配置登录成功后的页面-->
        <property name="successUrl" value="/index.jsp"/>
        <!--配置没有获得访问权限的页面-->
        <property name="unauthorizedUrl" value="/unauthorized.jsp"/>

        <property name="filterChainDefinitions">
            <value>
                <!--anon 表示Login.jsp可以匿名访问-->
                /Login.jsp = anon
                /login=anon
                <!--配置退出-->
                /logout=logout

               <!--配置角色-->
                /user.jsp=roles[user]
                /admin.jsp=roles[admin]
                <!--authc表示剩余的页面必须在登录后访问-->
                /** = authc
            </value>
        </property>
    </bean>
</beans>
第二步:配置MyRealm的类

package org.peter.realm;

import org.apache.shiro.authc.*;
import org.apache.shiro.authz.AuthorizationInfo;
import org.apache.shiro.authz.SimpleAuthorizationInfo;
import org.apache.shiro.crypto.hash.SimpleHash;
import org.apache.shiro.realm.AuthorizingRealm;
import org.apache.shiro.subject.PrincipalCollection;
import org.apache.shiro.util.ByteSource;

import java.util.HashSet;
import java.util.Set;

/**
 * Created by Lenovo on 2017/8/1.
 */
public class MyRealm extends AuthorizingRealm {
    @Override
    public String getName() {
        return "MyRealm";
    }

    @Override
    public boolean supports(AuthenticationToken token) {
        return token instanceof UsernamePasswordToken;
    }

    // MD5消息摘要(密码加密)
    @Override
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token1) throws AuthenticationException {
        UsernamePasswordToken token = (UsernamePasswordToken) token1;
        /*获取到用户名*/
        String username = token.getUsername();
        if ("zs".equals(username)){
            throw new UnknownAccountException("用户名不存在");
        }
        if ("ls".equals(username)){
            throw new LockedAccountException("该用户已经被锁");
        }
        // 取数据库中在查询
        // ....................
        Object credentials = null;
        if ("admin".equals(username)){
            credentials="c41d7c66e1b8404545aa3a0ece2006ac";
        }else if("wangwu".equals(username)){
            credentials="b6f8daff78cfcb486454e6914e666c71";
        }

        ByteSource credentialsSalt = ByteSource.Util.bytes(username);
        SimpleAuthenticationInfo info = new SimpleAuthenticationInfo(username, credentials,credentialsSalt, getName());
        return info;
    }

    public static void main(String[] args) {
//      解密:
        ByteSource salt = ByteSource.Util.bytes("wangwu");
        SimpleHash simpleHash = new SimpleHash("MD5","123",salt,1024);
        System.out.println(simpleHash);
    }

    @Override
    /*这个方法是授权的方法*/
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        Object principal = principalCollection.getPrimaryPrincipal();
        Set<String> roles = new HashSet<>();
        roles.add("user");
        if ("admin".equals(principal)){
            roles.add("admin");
        }
        SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(roles);
        return info;
    }
}
第三步:再利用Shiro的标签来实现相应的角色可以看到相应的jsp

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>欢迎页面</title>
  </head>
  <body>
  <h1>热烈欢迎</h1>
  <a href="/test">test</a>
  welcome<shiro:principal/><br>
  <a href="/logout">退出</a><br>
  <shiro:hasRole name="admin">
  <a href="/admin.jsp">admin.jsp</a><br>
  </shiro:hasRole>
  <shiro:hasRole name="user">
  <a href="/user.jsp">user.jsp</a><br>
  </shiro:hasRole>
  </body>
</html>

Shiro的第二种注解的方式实现授权

为了看到Shiro注解实现授权

第一步:创建一个MyService类,里面定义一个Test方法

package org.peter.service;

import org.apache.shiro.authz.annotation.RequiresRoles;
import org.springframework.stereotype.Service;

/**
 * Created by Lenovo on 2017/8/1.
 */
@Service
public class MyService {
    @RequiresRoles({"admin"})
    public void test(){
        System.out.println("hahhhahahahah");
    }
}

第二步:在Controller里面配置

package org.peter.controller;

import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.subject.Subject;
import org.peter.service.MyService;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.annotation.Resource;

/**
 * Created by Lenovo on 2017/8/1.
 */
@Controller
public class HelloController {
    /*测试*/
    @Resource
    MyService myService;
    @RequestMapping("/test")
    public void test(){
        myService.test();
    }

}

第三步:在jsp的页面里添加一个超链接来测试

<%@ taglib prefix="shiro" uri="http://shiro.apache.org/tags" %>

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
  <head>
    <title>欢迎页面</title>
  </head>
  <body>
  <h1>热烈欢迎</h1>
  <a href="/test">test</a>
  </body>
</html>




Shiro认证流程和授权流程 认证:身份验证,即在应用中谁能证明他就是他本人。一般提供如他们的身份ID一些标识信息来表明他就是他本人,如提供身份证,用户名/密码来证明。 在shiro中,用户需要提供principals (身份)和credentials(证明)给shiro,从而应用能验证用户身份: principals:身份,即主体的标识属性,可以是任何东西,如用户名、邮箱等,唯一即可。一个主体可以有多个principals 阅读详情

相关推荐

NSGA-Ⅱ算法:从原理到实战,解锁多目标优化难题

本文深入解析NSGA-Ⅱ算法在多目标优化中的应用,从原理到实战全面覆盖。通过快速非支配排序、精英策略和拥挤度比较三大创新,NSGA-Ⅱ有效解决了传统算法的效率与多样性问题。结合工业案例展示其在注塑工艺优化中的显著效果,为工程师提供实用解决方案。

weixin_29207149的博客 365

Shiro中的加密和验证策略

上篇中我们说了Shiro的框架的认证,这篇我们来说说Shiro框架的加密和验证策略 Shiro的加密有很多,现在常用的就MD5(消息摘要),要想给传入密码加密要在Spring的 applicationContext配置 <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://ww

Strive_Peter的博客 650

Pdu Router(PduR)模块

1. PduR路由基本功能 2. PduR总线网关功能 3. PduR缓存机制 4. 总结

weixin_43759043的博客 3849

Authorization

授权,也叫访问控制,即在应用中控制谁访问哪些资源(如访问页面/编辑数据/页面操作等)。在授权中需了解的几个关键对象:主体(Subject)、资源(Resource)、权限(Permission)、角色(Role)。 Shiro对于权限控制使用可以分为两种:1、对于url访问的权限配置控制 2、编程的显示调用控制。 1、对于url访问的权限控制 <bean id="shiroFilt...

weixin_30642561的博客 1870

无人机——电机篇(一)

1. 电机的定义 电机俗称“马达”,是无人机的动力来源,无人机通过改变电机的转速来改变无人机的飞行状态。即改变每个电机的速度,使得无人机能够盘旋空中,上升或下降,或向各个方向移动。2. 电机的分类 电机分为:“无刷电机”和“有刷电机” - 无刷电机:是采用半导体开关器件来实现电子换向,具有可靠性高、低干扰、低噪声低、寿命长等优点。一般应用在稍大型的飞行器,载重大,可以有更广泛的用途。 - 有刷电机:是内含电刷装置的将电能转换成机械能(电动机)或将机械能转换成电能(发电机)的旋转电机。有刷电机是所有电机的基

weixin_46066938的博客 1万+

YOLO26涨点改进 | 小目标损失函数独家改进篇 | TGRS 2025 | 引入AdaFocalLoss损失函数,改进小目标检测,自适应聚焦小目标与样本分布不平衡,提升检测精度与训练稳定性

本文提出将AdaFocalLoss损失函数应用于YOLO26模型优化,有效提升小目标检测性能。AdaFocalLoss通过目标尺寸感知机制和IoU引导的动态调节,自动调整训练权重和聚焦程度,解决了样本不平衡问题。相比传统损失函数,它无需手动调参,能增强训练稳定性,在多尺度、复杂场景下表现优异。文章详细介绍了AdaFocalLoss的原理、优势及实现方法,并提供了代码集成指南。实验表明该方法能显著提升检测精度和鲁棒性,特别适用于小目标检测任务。

Ai缝合怪、助力小伙伴高效发论文 335

cas+shiro 的单用户登录

该系统分为两部分,服务器和客户端,这里要说明一下,服务器上删除ticket的代码,我是拿的悟空大神的,并没有改动,具体地址为:https://blog.youkuaiyun.com/u010475041/article/details/78662266 应用场景: A登陆了系统,正在玩着玩着,B也登陆了系统。这时候让A被迫下线。 思路: 首先我们先知道,在cas服务端,是有方法可以获取服务端现在的t...

qq_36666181的博客 1260

Windows 下 Codex 安装全记录:从零到一的保姆级图文教程

本文主要介绍了Windows 下 Codex 安装全记录:从零到一的保姆级图文教程,希望能对学习使用 Codex 的同学们有所帮助。 文章目录 1. 背景 2. 实战教程 2.1 方案一 2.2 方案二 3. 报错解决方案

weixin_43178406的博客 14万+

【Shiro】三、Apache Shiro授权功能的主要流程

一、Shiro框架的授权功能简介 授权,也称为访问控制,是确定对应用程序中资源的访问权限的过程。换句话说,确定“谁有权访问什么”。授权用于回答安全性问题,例如“是否允许用户编辑帐户”,“是否允许该用户查看此网页”,“该用户是否有权访问此按钮?”这些都是决定用户有权访问哪些内容的决定,因此,所有决定都代表授权检查。 授权是任何应用程序的关键要素,但它很快就会变得非常复杂。Shiro的目标是消除授权方面的许多复杂性,以便您可以更轻松地构建安全的软件。下面是Shiro授权功能的重点。 优点: 基于主.

KevinBrain的博客 418

22、嵌入式软件随机延迟生成与加密算法防护技术

本文探讨了嵌入式软件中的随机延迟生成方法与块密码软件实现的高阶掩码及洗牌技术。重点介绍了浮动均值延迟生成方法,其在8位AVR平台上的实现效率为Θ(1),显著提升了抗相关功率分析(CPA)攻击的能力,相比传统方法更安全且轻量。同时,分析了高阶掩码与洗牌技术结合的方案,通过理论建模量化其对高级差分功率分析(DPA)攻击的抵抗能力,并以AES为例展示了该方案的应用流程。最后对比了不同防护技术在安全性与开销之间的权衡,为实际应用中选择合适的安全策略提供了依据。未来可进一步优化实现效率并融合多种防护手段以应对复杂安全

fern8的博客 86

SAP Joule for Consultants 与 Joule for Developers 全面解读

SAP推出面向不同用户群体的Joule AI助手:开发者版(Joule for Developers)专注于编码提效,嵌入开发工具链辅助生成、重构和测试代码;顾问版(Joule for Consultants)聚焦业务场景,集成SAP云应用知识库,为咨询项目提供方案设计、差距分析和实施指引。两者共享AI底座但功能侧重点不同:开发者版优化技术开发流程,顾问版加速项目交付周期。典型应用场景包括制造业云转型方案制定和ABAP代码迁移,分别展示了两版本在业务决策支持和技术实施中的价值。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 538

sprinboot整合shiro,MD5加密,加盐

前段时间看到的springboot和shiro整合的视频,现特意在此进行展示出来,方便以后来进行查看,看过的朋友点个赞是最好的,自己加油! 说起整合,必须要搭建的是springboot的环境,以及进行shiro整合包的导入,项目是做的mavne项目,后期会陆续推送springboot与websocket的整合,springboot全局异常处理,springboot与quartz整合,spring...

JJoinLin的博客 751

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Shiro授权详解

在进行Shiro授权之前,了解相关术语对于理解整个过程至关重要。Shiro的授权机制以角色为中心,辅以权限,来控制主体对资源的访问。授权是指确定主体是否有权访问某一资源或执行某一操作。通过角色和权限机制,Shiro为系统提供了细粒度的访问控制能力主体是指当前的用户、设备或其他能与应用进行交互的实体。每个主体在登录后,会被分配一定的权限和角色来确定其行为资源可以是系统中的任意数据或服务,例如文件、API接口等,主体通过权限来访问这些资源权限是允许主体执行某个具体操作的规则。

Mr.W的博客 907

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

Shiro框架:授权流程、授权方式、Shiro授权入门程序、自定义Realm进行授权

一、Shiro授权: 1、授权与权限: (1)授权:访问控制,必须具有该资源的访问权限才可以访问该资源。 (2)权限模型:标准权限数据模型包括 :用户、角色、权限(包括资源和权限)、用户角色关系、角色权限关系。 (3)权限分配:通过UI界面方便给用户分配权限,对上边权限模型进行增、删、改、查操作。 (4)权限控制: 第一种:基于角色的权限控制:根据角色判断是否有操作权限,因为角色的变化...

张维鹏的博客 4634

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Shiro 授权

有过 Shiro 基础的小伙伴都知道,在 Shiro 中最核心的两部分就是 认证 和 授权。本篇博客主要对 授权 进行总结,本篇不涉及任何实际代码,全都是个人的学习心得体会,各位大佬们不喜勿喷哦~授权,它其实是访问控制,也就是控制谁能访问哪些资源。当主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。我们可以通过一张图来了解 授权 的流程:一、授权流程我们从上图看,当主体认证成功后,会进入系统,然后进行授权。

2301_79438104的博客 734

Shiro授权(Authorization)

Shiro是一个强大的Java安全框架,它在授权(Authorization)方面提供了灵活且全面的支持。以下是对Shiro授权的详细解释:授权,也叫访问控制,即在应用中控制谁能访问哪些资源(如访问页面、编辑数据、页面操作等)。Shiro通过一系列的机制来实现对资源的细粒度控制,确保只有具备相应权限的用户才能访问特定的资源。基于角色的授权(Role-Based Authorization):基于权限的授权(Permission-Based Authorization):自定义授权(Custom Author

2401_82806976的博客 1490

掌握Shiro授权

创建一个自定义的Realm类,用于处理用户的认证和授权逻辑。public class MyShiroRealm extends AuthorizingRealm { // 安全数据源@Resource@OverrideSystem.out.println("调用MyShiroRealm.doGetAuthenticationInfo获取身份信息!");// 获得身份信息// 账号错误// 账号锁定。

2303_78378466的博客 1132

shiro授权过程

一、授权的核心概念 授权,也就是权限认证或访问控制,即在应用中控制谁能访问哪些资源 授权中的核心要素: 1 用户,在shiro中代表访问系统的任何客户端,即subject 2 角色,是权限的集合,或字符串值表示的一种能力。 3 权限,即操作资源的权利。比如访问某个页面,以及对某功能模块的添加、修改、删除、查看的权利 (http://shiro.apache.org/authorization.ht...

jasnet_u的博客 1534

Shiro之简单授权篇

本篇博客带大家学习Shiro实现简单授权 Shiro授权过程 1.创建Security Manager对象去构建Security Manager的环境。(用于提供安全服务) 2.主体提交授权请求给Security Manager,Security Manager去通过Authorizer(授权器)来从Realms中获取角色权限数据,然后用Realms从数据库中获取角色权限数据。 创建secu...

小宋的博客 5508

Shiro_授权

目前,使用Apache Shiro的人越来越多,因为它相当简单,对比Spring Security,可能没有Spring Security做的功能强大,但是在实际工作时可能并不需要那么复杂的东西,所以使用小而简单的Shiro就足够了。对于它俩到底哪个好,这个不必纠结,能更简单的解决项目问题就好了。对于页面的错误消息展示,最好使用如 “用户名 / 密码错误” 而不是 “用户名错误”/“密码错误”,防止一些恶意用户非法扫描帐号库;3.授权器根据主体的身份信息、角色和权限配置,判断主体是否具有访问资源的权限。

whs_8792的博客 1150

【Shiro】3. Shiro授权流程

授权 授权,即访问控制,控制谁能访问哪些资源。主体进行身份认证后需要分配权限方可访问系统的资源,对于某些资源没有权限是无法访问的。 授权的关键对象 授权可简单理解为Who对What / Which进行How操作。 Who:主体(Subject),主体需要访问系统中的资源。 What / Which:资源(Resource),如系统菜单、页面、按钮、类方法、系统商品信息等。资源包括资源类型和资源实例,比如商品信息为资源类型,类型为Type01的商品为资源实例,编号为001的商品信息也属于资源实例。

xiaoyuan_27的博客 962

shiro 授权介绍

授权即访问控制,它将判断用户在应用程序中对资源是否拥有相应的访问权限。 如,判断一个用户有查看页面的权限,编辑数据的权限,拥有某一按钮的权限,以及是否拥有打印的权限等等。 一、授权的三要素 授权有着三个核心元素:权限、角色和用户。 权限 权限是Apache Shiro安全机制最核心的元素。它在应用程序中明确声明了被允许的行为和表现。一个格式良好好的权限声明可以清晰表达出用户对

逆风奔跑。。不要去考虑什么天赋异禀,一切都来自经历和渴望。 1万+
上一篇: Shiro中的加密和验证策略
下一篇: SSH框架的整合之路
@夫子慧
博客等级 码龄9年 9粉丝 55原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值