Shiro安全框架(授权部分)

麒麟OS恢复出厂设置原理与实操:非重装的系统状态回滚 Linux操作系统中的‘恢复出厂设置’并非简单重装或镜像还原,而是一种基于状态快照、包管理与配置模板的可控回滚机制。其核心原理依赖LVM快照技术、RPM包签名验证和预置配置模板,兼顾系统稳定性与用户数据安全。该方案在政务、教育等国产化场景中具有显著技术价值——不格式化硬盘、不丢失/home文档、不重配驱动与授权,大幅降低运维复杂度。典型应用场景包括系统卡顿修复、软件冲突清理、桌面环境异常恢复等。本文深入解析银河麒麟V10的kylin-restore-cli工具链与麒麟管家集成逻辑,聚焦‘恢复出厂设置’这一高 阅读详情

       看过我的Shiro认证部分博文的童鞋们一定已经对Shiro安全框架有了一些的认识,关于Shiro框架大致的认证流程,框架内部为我们提供了哪些功能实现,都有了大致的了解,这篇博文主要大致讲解一下shiro授权的部分的具体实现流程,和代码片段。

       授权,顾名思义是判断用户具体的有哪些权限,我们去开发一个系统,首先看来访者有没有访问系统的权限,进入系统的这一方面是认证,而在用户进入了 我们的系统之后,我们的系统会有很多的菜单或者对资源的增删改查操作,并不是所有的用户都能对我们的系统进行所有操作,假设我们是一个商城的小系统,订单的创建,订单的管理,用户的管理都不是所有用户可以操作的,有些账号只拥有查看的权限,而有一些比如admin账号才具有对系统某些核心模块的操作。但是大的流程不会变得是所有的用户在进入系统之前首先是要经过认证,如果都没有通过认证当然就不去判断用户是否具有哪些权限。

  那接下来我就接着上次的认证代码继续写,没看过我上一篇博文的童鞋可以去看一下,

  传送门:https://blog.youkuaiyun.com/JavaJieRui/article/details/108465791

       首先,我们调用subject(主体)的 hasRole("admin") 方法,这个方法是用来看主体对象有没有某一个具体的权限,假设我们来看一下主体对象有没有admin的权限:

if (subject.isAuthenticated()) {
            System.out.println(subject.hasRole("admin"));
        }

        结果一定是没有,为什么呢?因为在我们的自定义Realm里没有对用户的权限进行添加,只是在方法中返回了一个null值,因为在调用这个方法的时候他会去找我们自定义Realm中的 doGetAuthorizationInfo 方法,而我们只是返回了一个null值,所以会输出false:

doGetAuthorizationInfo 方法代码片段:

/**
     * 授权
     * @param principalCollection
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        return null;
    }

  输出结果:

可以看到输出结果是false

        那我们如何去做呢?可以看到在上面那个授权的方法代码片段中传入了一个参数,那这个是什么呢?他其实就是一个身份的集合(一个主体可以有多个身份但是只能有一个主身份),我们可以来看一下:

/**
     * 授权
     * @param principalCollection
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        String primaryPrincipal = (String) principalCollection.getPrimaryPrincipal();
        System.out.println(primaryPrincipal);
        return null;
    }

在运行测试类看用户是否有admin权限的时候,是不是来这里找这个方法了:

       走了这个方法并且输出了当前用户名,(在日后我们连接了数据库之后拿到了用户的用户名也就可以拿到当前用户的身份和权限信息)那我们怎么赋予这个用户权限呢?其实也很简单,看了我上一篇博文的童鞋一定对SimpleAuthenticationInfo这个对象不陌生,这个对象就是我们做认证的时候将用户名,密码等参数传入在测试类中验证的。在授权的方法中同样有一个对象是SimpleAuthorizationInfo,这个就是用来操作授权的对象,,其实很好记,一个SimpleAuthenticationInfo对象用来认证,一个SimpleAuthorizationInfo用来操作权限,我们可以看到下方截图在.方法的时候有很多的方法可以用,然后为大家上代码片段:

首先我们用addRole方法为他添加一个权限,也就是假设我们在数据库中查到他的身份信息就是admin:

 /**
     * 授权
     * @param principalCollection
     * @return
     */
    @Override
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        String primaryPrincipal = (String) principalCollection.getPrimaryPrincipal();
        System.out.println(primaryPrincipal);
        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
        simpleAuthorizationInfo.addRole("admin");
        return simpleAuthorizationInfo;
    }

添加admin权限后,返回这个simpleAuthorizationInfo对象,再来运行一下测试类,可以看到结果变成了true:

那我们可以再次试一下看我们的lisi这个用户有没有super这个角色呢?

if (subject.isAuthenticated()) {
            System.out.println(subject.hasRole("admin"));
            System.out.println(subject.hasRole("super"));
        }

答案是否定的,他并没有super这个角色

   同时可以看到,你每次去查询他的角色权限信息的时候他会去找一次lisi这个用户,所以这样如果多次查询的话对数据库的访问压力也是很大的。

下面是几种情况的代码段:

if (subject.isAuthenticated()) {
            System.out.println("是否具有某个角色==================");
            //角色权限控制
            System.out.println(subject.hasRole("admin"));
            System.out.println(subject.hasRole("super"));
            //多角色权限控制,假设想看一下有哪些角色
            System.out.println(subject.hasAllRoles(Arrays.asList("admin", "user")));
            System.out.println("是否具有其中一个角色====================");
            //是否具有其中一个角色
            for (boolean b : subject.hasRoles(Arrays.asList("super", "admin", "user"))) {
                System.out.println(b);
            }
        }

以下是输出结果,也就是shiro授权部分提供了几种供我们选择的业务场景:

       看当前用户对某一资源模块是否有操作权限,例如,我们来看一下当前用户对user模块有没有所有的操作权限,因为我们没有配所以结果一定是false:

System.out.println("=============权限字符串的访问控制=========");
            //权限字符串的访问控制 资源标识符:操作:资源类型
            System.out.println("权限:"+subject.isPermitted("user:*:*"));//这个意思就是看当前subject有没有整个user模块的所有操作权限

结果:

下面我们在自定义Realm里给当前主体对象一个权限:

//将数据库查询权限信息赋值给权限对象
        simpleAuthorizationInfo.addStringPermission("user:*:01");//这个权限字符串的含义是当前对象只对01用户有所有操作权限

这样的话,结果还是为false,就不测试了,下面我们给当前用户赋予一个所有模块的所有操作权限,再来测试一下结果:

       可以看到上方的截图是true,那么我们再来思考一下,如果在测试类中将权限字符串改为user:create:01,也就是对user模块的01用户进行创建操作会是什么结果呢?答案也是true,因为这里都配了,user:*:*也就是说在user模块中所有的都能通过,我就不为大家测试了,再来打个比方,如果在自定义Realm中我们将权限字符串配为user:create,在user模块中对所有用户进行创建操作,在测试类中配为user:update会为true吗?答案也是否定的,因为我们在自定义Realm中配的是对所有用户的创建操作有权限,而测试类中是更新操作,所以会为false。

再来看一下分别具有哪些权限:

System.out.println("分别具有哪些权限"+"=======================");
            //分别具有哪些权限
            boolean[] permitted = subject.isPermitted("user:*:*", "order:*:*");
            for (boolean b : permitted) {
                System.out.println(b);
            }

看当前主体是否具有用户模块的所有权限,订单模块的所有权限,结果为true,false:

下面是看当前主体对象同时具有哪些权限: 

System.out.println("==============同时具有哪些权限===============");
            //同时具有哪些权限:
            System.out.println(subject.isPermittedAll("user:*:*", "product:*:*"));

结果(false): 

       当前shiro权限的部分就写到这里了,其实权限部分看起来有一些多,内容也有一些杂乱,但是整体还是比较简单的,对有权限的认证还是挺清晰的,主要是根据shiro为我们提供的API来体会整个我们在平时开发中会用到的一些权限认证的几个不同的业务场景,希望能看下来的小伙伴能够体会一下其中不同API的用法和结合自身业务来使用shiro的权限模块。

      在下一篇博文中,我会就shiro安全框架与springboot进行整合,并且连接数据库,不再使用当前demo中的假数据,进一步让大家体会shiro的魅力,谢谢大家。

基于Python的军事装备数据爬取与分析:从网页抓取到数据可视化实战 本文将详细介绍如何使用Python最新技术栈构建一个完整的军事装备数据爬虫系统。我们将从爬虫基础讲起,逐步深入到异步爬取、反反爬策略、数据存储与分析等高级主题,最终实现一个能够自动抓取、清洗、存储和分析军事装备数据的完整解决方案。文章包含大量实战代码示例,涉及requests-html、aiohttp、Playwright等现代爬虫库,以及MongoDB存储、Pandas分析和Pyecharts可视化等技术。关键词:Python爬虫、军事数据、异步爬取、反反爬、数据可视化。 阅读详情

相关推荐

离线迁移 Conda 环境到 Windows 服务器:用 conda-pack 摆脱硬路径限制

在进行深度学习算法的环境部署时,由于生产服务器被彻底隔离外网,只能把conda中env文件夹中的虚拟环境文件夹从开发机直接拷到Windows 服务器,但在运行labelimg等工具时可能报错,因此用conda-pack来解决。

weixin_44115575的博客 1425

【Shiro】SimpleAuthorizationInfo如何授权

本文基于上一篇文章进行介绍【Shiro】SimpleAuthenticationInfo如何验证password。经过上一篇文章的探求,这回直接找准方法;我们回过头看下ShiroRealm,它继承了AuthorizingRealm。

kevin的博客 1398

【机械臂算法】基于最小惯性参数集的动力学辨识仿真实践

本文深入探讨了机械臂动力学参数辨识的核心挑战与解决方案,重点阐述了基于最小惯性参数集的理论与方法。通过分析PUMA560实例,详细介绍了利用QR分解法或符号推导法获取可辨识参数集,并系统讲解了从激励轨迹设计、仿真数据采集、线性系统求解到模型验证的完整实践流程,为高精度动力学建模与控制奠定了坚实基础。

weixin_29054399的博客 376

shiro授权SSM

shiro授权SSM 授权 1.添加角色和权限的授权方法 //根据username查询该用户的所有角色,用于角色验证 Set findRoles(String username); //根据username查询他所拥有的权限信息,用于权限判断 Set findPermissions(String username); 在ShiroUserMapper.xml中新增内容: <select id...

hao_dream_xi的博客 321

STM32F407驱动OV2640摄像头:从SCCB协议到I2C模拟的保姆级避坑指南

本文详细介绍了STM32F407驱动OV2640摄像头的完整流程,重点解析SCCB协议与I2C的关键差异,并提供GPIO模拟实现方案。通过实战案例和调试技巧,帮助开发者避开常见陷阱,实现稳定的图像采集功能。

weixin_28700411的博客 345

从零构建生产级K8s-v1.35.0集群:基于Containerd与Cilium的kubeadm实战指南

本文详细介绍了从零构建生产级K8s-v1.35.0集群的全过程,涵盖环境准备、Containerd配置、Kubernetes组件安装、集群初始化及Cilium网络部署等关键步骤。通过实战经验分享系统调优技巧和常见问题解决方案,帮助读者快速搭建稳定高效的Kubernetes集群。

weixin_28725553的博客 219

Shiro的学习

Shiro的学习

m0_63224330的博客 1057

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

学习心得——COMSOL Multiphysics with MATLAB联合仿真及寻优计算

weixin_41678956的博客 8657

shiro身份验证授权入门

一、 介绍: shiro是apache提供的强大而灵活的开源安全框架,它主要用来处理身份认证,授权,企业会话管理和加密。 shiro功能:用户验证、用户执行访问权限控制、在任何环境下使用session API,如cs程序。可以使用多数据源如同时使用oracle、mysql。单点登录(sso)支持。remember me服务。详细介绍还请看官网的使用手册:http://shiro.apache.org/reference.html 与spring security区别,个人觉得二者的主要区别是: 1、shir

fwdwqdwq的博客 638

使用R语言(ggplot2)绘制KEGG信号通路富集气泡图

本文详细介绍了如何使用R语言的ggplot2包绘制KEGG信号通路富集气泡图,从数据预处理到高级定制技巧,帮助生物信息学研究者直观展示富集分析结果。文章涵盖了气泡图的核心绘制方法、布局优化、常见问题解决方案以及交互式可视化扩展,是进行KEGG富集分析可视化的实用指南。

weixin_42625070的博客 447

机器人控制仿真软件:MATLAB Simulink Control System Toolbox_(1).MATLAB基础知识

MATLAB(Matrix Laboratory)是由MathWorks公司开发的一种高性能数值计算和可视化软件。它广泛应用于科学计算、工程设计、信号处理、控制系统设计、图像处理等领域。强大的矩阵运算能力:MATLAB的核心是矩阵运算,能够高效处理大规模的数值数据。丰富的工具箱:MATLAB提供了大量的工具箱,如Control System Toolbox、Simulink、Signal Processing Toolbox等,这些工具箱覆盖了多个应用领域。易于使用的图形界面。

kkchenjj的博客 904

springboot集成shiro安全框架实现用户身份认证和授权

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。 主要功能: 三个核心组件:Subject, SecurityManager 和 Realms. Subject:即“当前操作用户”。但是,在Shiro中,Subject这一概念并...

weixin_44341110的博客 1047

安全监控:人员行为分析_(2).人员行为分析基础理论

人员行为分析是指利用计算机视觉技术对视频中的人类行为进行实时或离线检测、识别和理解的过程。视频采集:通过摄像头等设备获取视频数据。视频预处理:对视频数据进行噪声过滤、图像增强等处理,以便后续分析。特征提取:从视频中提取出与人员行为相关的特征,如人体姿势、动作轨迹等。行为识别:利用机器学习或深度学习模型对提取的特征进行分类,识别出具体的人员行为。行为理解:对识别出的行为进行进一步分析,理解其背后的意图或状态。在人员行为分析中,常用的公开数据集包括UCF101、HMDB51、ActivityNet等。

zhubeibei168的博客 1345

Shiro安全框架(Shiro与SpringBoot整合开发)授权部分(三)权限实现

之前我们再shiro中已经实现了认证数据的数据库获取,权限数据的数据库获取,最后我们再来看一下有关权限字符串集合的获取,其实权限字符串的获取和角色的获取集合也是大同小异的,下面就可以来看一下这个权限的细粒度的权限控制。 首先我们来分析一下,在数据库中的表:分别是 t_role,t_perms,t_role_perms这三张表,t_role是角色表,t_perms为权限表,t_roler_perms为权限与角色的中间表,那么我们最终的目的就是要通过角色id来获取权限字符串,url,角色名称。 那么想好需要

JavaJieRui的博客 227

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

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

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

Shiro安全框架(Shiro与SpringBoot整合开发)授权部分(一)编码

对于shiro框架我们之前已经分别叙述了shiro在.ini文件中的认证,shiro代码中硬编码的认证实现,以及我们将shiro与springboot整合的认证实现,还有我们将shiro与springboot整合之后,连接数据库的认证实现,接下来我们继续为大家展开来研究一下shiro与springboot整合之后连接数据库的授权方面的实现,其实与之前shiro连接数据库做认证的实现思路相似,我们也首先来理一下思路。 一、关于shiro与springboot整合的授权实现思路 首先,shiro这个安全框架

JavaJieRui的博客 408

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

Shiro安全框架(Shiro与SpringBoot整合开发)授权部分(二)连接数据库

我们之前已经为大家展示了一下shiro授权数据在Realm中的简单实现,那这时我们就要将shiro的授权数据持久化至数据库中去,因为我们将来一个系统一定是有很多用户,并且也是拥有很多角色的,我们的授权数据不可能总是在Realm中写,所以这时,我们就要将授权数据持久化进数据库中去。接下来就简单分析一下思路。 ...

JavaJieRui的博客 361

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

shiro框架了解

shiro框架

ABestRookie的博客 557

shiro安全框架

shiro是Apache提供的安全框架,主要有四大功能:认证(即登录认证)、授权(授权用户拥有访问哪些资源权限)、回话管理(管理用户的session)以及加密(数据加密)。 首先创建一个javase或者javaee项目,我是建立的javaee项目,首先创建一个简单的shiro项目。 一、shiro认证 在src下创建一个名为shiro.ini的文件,文件内容写入: [users] zhangsan=123456 [users]表示是用户组,zhangsan是用户名,123456是密码,只是简单的

qq_31539817的博客 376

SpringBoot之----了解Shiro安全框架整合Mybatis和thymeleaf,实现授权登陆认证

这里我做一个流程图帮助大家理解Shiro安全框架整合Mybatis和thymeleaf,实现授权登陆认证的过程,大家先了解,然后看代码,看完代码再看流程图。 1.了解完那我们先看项目结构: 项目结构: 数据库截图: 2.我们再看整个项目的代码: pom.xml <?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w

aaa123_456aaa的博客 2997

安全框架Shiro和Spring Security比较

目前的网站都是依靠用户名和密码来登录认证,这就意味着大家在每个网站都需要注册用户名和密码,即便你使用的是同样的密码。如果使用 OpenID ,你的网站地址(URI)就是你的用户名,而你的密码安全的存储在一个 OpenID 服务网站上(你可以自己建立一个 OpenID 服务网站,也可以选择一个可信任的 OpenID 服务网站来完成注册)。"客户端"登录授权层所用的令牌(token),与用户的密码不同。"客户端"登录授权层以后,"服务提供商"根据令牌的权限范围和有效期,向"客户端"开放用户储存的资料。

blanceage的博客 986

安全框架-Shiro

什么是Shiro        Apache Shiro是一个强大易用的Java安全框架,提供了认证、授权、加密和会话管理等功能。 Shiro能做什么         认证:验证用户来核实他们的身份         授权:对用户执行访问控制,如: 判断用户是否被分配了一个确定的安全角色;判断用户是否被允许做某事;         会话管理:在任何环境下使用Session API,即使没有

有梦才叫青春 1780

shiro权限控制(一):shiro介绍以及整合SSM框架

shiro安全框架是目前为止作为登录注册最常用的框架,因为它十分的强大简单,提供了认证、授权、加密和会话管理等功能 。 一、shiro能做什么?        认证:验证用户的身份        授权:对用户执行访问控制:判断用户是否被允许做某事        会话管理:在任何环境下使用 Session API,即使没有 Web 或EJB 容器。        加密:以更简洁易用的方式使...

LYQ2332826438的博客 432

Shiro简介

1、什么是Shiro? Apache Shiro 是一个Java 的安全(权限)框架。 Shiro 可以非常容易的开发出足够好的应用,其不仅可以用在JavaSE环境,也可以用在JavaEE环 境。 Shiro可以完成,认证,授权,加密,会话管理,Web集成,缓存等。 下载地址:http://shiro.apache.org/ 2、有哪些功能 Authentication: 身份认证、登录,验证用户是不是拥有相应的身份; Authorization:授权,即权限验证,验证某个已认证的用户是否拥有

qq_45554909的博客 478

[网络安全]shiro安全框架基本原理

本文为Shiro框架简介,无安全,不shiroshiro安全框架问世的意义在于提供了一种有效的解决方案,帮助开发者和企业更好地保护自己的系统和数据安全。Shiro 可以与各种 Java 框架和应用程序进行集成,如Spring等。此外,Shiro 还可以与多个数据源集成,如JDBCLDAPNoSQL 数据库等,使得应用程序更加灵活。shiro 是一款非常流行的 Java 安全框架,它为企业级应用程序提供了身份验证、授权、会话管理和加密等安全支持功能。

Hacker_Fuchen的博客 814

认证授权示例——JWT及Shiro

1、常见的认证机制 1.1 HTTP Basic Auth HTTP Basic Auth简单点说明就是每次请求API时都提供用户的usernamepassword,简言之,Basic Auth是配合RESTful API 使用的最简单的认证方式,只需提供用户名密码即可,但由于有把用户名密码暴露给第三方客户端的风险,在生产环境下被使用的越来越少。因此,在开发对外开放的RESTful API时,尽量...

qqxhb 资源共享 3250

什么是安全框架?Apache Shiro和Spring Security对比?

什么是安全框架?Apache Shiro和Spring Security对比?

weixin_69663261的博客 171
上一篇: Shiro安全框架(认证部分)
下一篇: Shiro安全框架(Shiro与SpringBoot整合开发)
JavaJieRui
博客等级 码龄7年 10粉丝 19原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值