Shrio_Shrio集成Spring&Authentication身份认证&Authorizing授权

SSM+ElementUI综合练习 文章目录1 前后端分离2 搭建前端环境3 ElementUI-基于vue前端ui框架4 Elementui+Crud实现4.1 页面布局4.2 接口数据模拟-Mockjs&Easymock4.3 crud数据模拟4.4 Ajax请求优化-axios 1 前后端分离 前后端分离并不只是开发模式,而是web应用的一种架构模式 前后端分离优势 ①效率高 ②专业的人做专业的事 ③打造精益的团队 ... 阅读详情

1 Shiro简介

1.1 Shiro介绍

Apache Shiro是一个强大且易用的Java安全框架,有身份验证、授权、密码学和会话管理。使用Shiro的易于理解的API,您可以快速、轻松地获得任何应用程序,从最小的移动应用程序到最大的网络和企业应用程序。
Spring security 重量级安全框架
Apache Shiro轻量级安全框架

1.2 Shiro功能

在这里插入图片描述
Shiro 开发团队称为“应用程序的四大基石” ——身份验证,授权,会话管理和加密作为其目标
Authentication(身份认证):这是一个证明用户是他们所说的他们是谁的行为
Authorization(授权):访问控制的过程,也就是绝对“谁”去访问“什么”权限
Session Management:管理用户特定的会话,即使在非 Web 或 EJB 应用程序。
Cryptography:通过使用加密算法保持数据安全同时易于使用。
Web Support: Shiro 的 web 支持的 API 能够轻松地帮助保护 Web 应用程序。
Caching:缓存是 Apache Shiro 中的第一层公民,来确保安全操作快速而又高效。
Concurrency: Apache Shiro 利用它的并发特性来支持多线程应用程序。
Testing:测试支持的存在来帮助你编写单元测试和集成测试,并确保你的能够如预期的一样安全。
“Run As”:一个允许用户假设为另一个用户身份(如果允许)的功能,有时候在管理脚本很有用。
“Remember Me”:在会话中记住用户的身份,所以他们只需要在强制时候登录。

2 Shiro入门

2.1 配置shiro.ini模式

导包

<dependencies>
    <dependency>
        <groupId>org.apache.shiro</groupId>
        <artifactId>shiro-core</artifactId>
        <version>1.4.0</version>
    </dependency>
    <dependency>
        <groupId>commons-logging</groupId>
        <artifactId>commons-logging</artifactId>
        <version>1.2</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
</dependencies>

测试 底层默认找IniRealm

2.2 自定义的Realm的模式

//自定义Realm
public class MyRealm extends AuthorizingRealm {
    //授权
    protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
        //得到主体 --用户名
        String primaryPrincipal = (String) principalCollection.getPrimaryPrincipal();
        //根据用户名去拿到权限 -- 从数据库查询
        Set<String> roles = getRoleByPrincipal(primaryPrincipal);
        //根据用户名去拿到角色 - 从数据库查询
        Set<String> permissions = getPermissionByPrincipal(primaryPrincipal);
        SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
        //设置角色
        simpleAuthorizationInfo.setRoles(roles);
        //设置权限
        simpleAuthorizationInfo.setStringPermissions(permissions);
        //返回对象
        return simpleAuthorizationInfo;
    }
    //通过用户拿到角色
    private Set<String> getRoleByPrincipal(String primaryPrincipal) {
        Set<String> roles = new HashSet<String>();
        if("haoge".equals(primaryPrincipal)){
            roles.add("admin");
            return roles;
        }else{
            return null;
        }
    }
    //通过用户拿到操作的权限
    private Set<String> getPermissionByPrincipal(String primaryPrincipal) {
        Set<String> permissions = new HashSet<String>();
        if("haoge".equals(primaryPrincipal)){
            permissions.add("driver:*");
            return permissions;
        }else{
            return null;
        }
    }
    //身份认证
    protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
        //得到令牌
        UsernamePasswordToken token = (UsernamePasswordToken) authenticationToken;
        //主体
        Object principal = token.getPrincipal();
        System.out.println(principal);
        //获取用户名 zhangsan
        String username = token.getUsername();
        System.out.println(username);
        //通过用户名 去数据库查询数据 -- 查询用户的信息
       // 没有加密返回 String dbpwd= getPwdByUsername(username);
        String md5Pwd = getMD5PwdByUsername(username);
        //处理用户名问题 用户名是否存在的问题
        if(md5Pwd==null){
            //用户不存在
            return null;
        }
        //ByteSource
        ByteSource salt = ByteSource.Util.bytes("itsource");
        //下面进行密码的比对  shiro 底层它会自动进行比对 -- 处理密码问题
        SimpleAuthenticationInfo simpleAuthenticationInfo = new SimpleAuthenticationInfo(username, md5Pwd,salt, getName());
        return simpleAuthenticationInfo;
    }
    //通过用户名去拿到密码
    public String getPwdByUsername(String username){
        if("haoge".equals(username)){
            return "123";
        }else{
            return null;
        }
    }
    //加密返回密码
    public String getMD5PwdByUsername(String username){
        if("haoge".equals(username)){
            return "d5a3fedf6c59c2ecbe7f7a6c1a22da37";
        }else{
            return null;
        }
    }
    public static void main(String[] args) {
        //MD5 本身是不可破解 ..不可逆  网上看到破解方式 都是穷举把
        //(1)普通加密+202cb962ac59075b964b07152d234b70 -123
        SimpleHash simpleHash = new SimpleHash("MD5","123" );
        //(2)加密+加次数
        SimpleHash simpleHash1 = new SimpleHash("MD5","123",null,10 );
        //5371007260db2b98e3f7402395c45f28
        //(3)加密123 加盐 + itsource +加次数 --d5a3fedf6c59c2ecbe7f7a6c1a22da37 -- 最安全
        SimpleHash simpleHash2 = new SimpleHash("MD5","123","itsource",10 );
        System.out.println(simpleHash.toString());
        System.out.println(simpleHash1.toString());
        System.out.println(simpleHash2.toString());
    }
}

测试

3 Shiro整合Spring

3.1 导入jar包

<!-- shiro的支持包 -->
 <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-all</artifactId>
    <version>1.4.0</version>
    <type>pom</type>
</dependency>
  <!-- shiro与Spring的集成包 -->
  <dependency>
    <groupId>org.apache.shiro</groupId>
    <artifactId>shiro-spring</artifactId>
    <version>1.4.0</version>
  </dependency>

3.2 配置过滤器

通过代理过滤器 找shiro里面真实过滤器

<!--这是一个代理过滤器,它会到spring的配置中找一个名称相同的真实过滤器-->
<filter>
    <filter-name>shiroFilter</filter-name>
    <filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
    <init-param>
        <param-name>targetFilterLifecycle</param-name>
        <param-value>true</param-value>
    </init-param>
</filter>
<filter-mapping>
    <filter-name>shiroFilter</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3.3 配置shiro的 ApplicationContext-shiro.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"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">

    <!--配置核心的安全管理器-->
    <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">
        <property name="realm" ref="myRealm" />
    </bean>

    <bean id="myRealm" class="cn.itsource.shiro.MyRealm">
        <property name="credentialsMatcher">
            <!--设置加密匹配方案-->
            <bean class="org.apache.shiro.authc.credential.HashedCredentialsMatcher">
                <!-- 编码的方式使用:md5 -->
                <property name="hashAlgorithmName" value="MD5"/>
                <!-- 编码的次数:10 -->
                <property name="hashIterations" value="10"/>
            </bean>
        </property>
    </bean>

    <!-- 3.lifecycleBeanPostProcessor:可以自动调用在Spring Ioc窗口中 Shiro bean的生成周期方法 -->
    <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/>
    <!-- 4.启动ioc容器中使用 shiro的注解,但是必需配置在Spring Ioc容器中Shiro bean的生成周期方法 -->
    <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>

    <!--真实过滤器  id必须是web.xml里面配的名字-->
    <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
        <property name="securityManager" ref="securityManager" />
        <!--认证没有成功跳转的页面-->
        <property name="loginUrl" value="/s/login.jsp" />
        <!--登录成功 进入的页面-->
        <property name="successUrl" value="/s/main.jsp" />
        <!--没有权限  进入的页面-->
        <property name="unauthorizedUrl" value="/s/unauthorized.jsp" />
        <!--
            配置放行和拦截的请求
            anon:不需要登录也可以访问相应的权限
            authc:需要权限才能访问
            /** :所有文件及其子文件
        -->
        <!--<property name="filterChainDefinitions">
            <value>
                /s/login.jsp=anon
                /login=anon
                &lt;!&ndash;对资源进行权限控制,要控制的资源都应该从数据库查出,现在咱们先写死&ndash;&gt;
                /s/permission.jsp = perms[user:*]
                /**=authc
            </value>
        </property>-->
        <property name="filterChainDefinitionMap" ref="filterChainDefinitionMap" />
    </bean>
    <!--
        配置bean
        factory-bean:具体应用bean
        factory-method:调用里面的方法
    -->
    <bean id="filterChainDefinitionMap" factory-bean="filterChainDefinitionMapBuilder" factory-method="createFilterChainDefinitionMap" />

    <bean id="filterChainDefinitionMapBuilder" class="cn.itsource.shiro.FilterChainDefinitionMapBuilder" />
</beans>

3.4 注意:在启动服务的时候,引用配置文件

<!--引入配置文件-->
<import resource="ApplicationContext-shiro.xml" />

4 完成shiro的认证和授权

4.1 认证

前台:
准备登陆页面

后台:
创建Controller /LoginController

@Controller
public class LoginController {
    @RequestMapping("/login")
    public String login(String username,String pwd){
        //主体
        Subject subject = SecurityUtils.getSubject();
        //判断该主体是否已经认证过
        if (!subject.isAuthenticated()) {
            try {
                UsernamePasswordToken token = new UsernamePasswordToken(username, pwd);
                subject.login(token);
            }catch (UnknownAccountException uae) {
                System.out.println("账号不存在");
            } catch (IncorrectCredentialsException ice) {
                System.out.println("密码有误");
            } catch (LockedAccountException lae) {
                System.out.println("这个账号已经被锁定");
            }catch (AuthenticationException ae) {
                System.out.println("其他认证错误");
            }
        }
        return "redirect:/s/main.jsp";
    }
}

4.2 登陆方法login(包含username,password)

4.3 身份认证

//身份认证
@Override
protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authenticationToken) throws AuthenticationException {
    String username = (String) authenticationToken.getPrincipal();
    UsernamePasswordToken token = (UsernamePasswordToken)authenticationToken;
    String username1 = token.getUsername();
    String pwd = getPwdByUsername(username1);
    if (pwd == null){
        return null;
    }
    //在这里加盐值需一个ByteSource对象,而Shiro提供了一个ByteSource对象给咱们
    ByteSource salt = ByteSource.Util.bytes("itsource");
    //密码比对
    SimpleAuthenticationInfo authenticationInfo = new SimpleAuthenticationInfo(username, pwd,salt,getName());
    return authenticationInfo;
}
private String getPwdByUsername(String username){
    if ("aaa".equals(username)){
        return "d5a3fedf6c59c2ecbe7f7a6c1a22da37";
    }else {
        return null;
    }
}

输入正确,完成登录,否则登录失败,返回登录界面

4.4 授权

//授权
@Override
protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principalCollection) {
    //当前用户的权限你弄出来 给 shiro
    //得到主体用户
    String username = (String) principalCollection.getPrimaryPrincipal();
    //根据用户  从数据库拿到权限  加入到shiro里面去
    Set<String> permissions = new HashSet<>();
    if(username.equals("aaa")){
        permissions.add("user:*");
        permissions.add("employee:*");

    }
    SimpleAuthorizationInfo simpleAuthorizationInfo = new SimpleAuthorizationInfo();
    simpleAuthorizationInfo.addStringPermissions(permissions);
    //返回权限里面  判断
    return simpleAuthorizationInfo;
}

5 配置放行和拦截的请求,控制的资源从数据库查出

5.1 ApplicationContext-shiro.xml配置

<!--真实过滤器  id必须是web.xml里面配的名字-->
<bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">
    <property name="securityManager" ref="securityManager" />
    <!--认证没有成功跳转的页面-->
    <property name="loginUrl" value="/s/login.jsp" />
    <!--登录成功 进入的页面-->
    <property name="successUrl" value="/s/main.jsp" />
    <!--没有权限  进入的页面-->
    <property name="unauthorizedUrl" value="/s/unauthorized.jsp" />
    <!--
        配置放行和拦截的请求
        anon:不需要登录也可以访问相应的权限
        authc:需要权限才能访问
        /** :所有文件及其子文件
    -->
    <!--<property name="filterChainDefinitions">
        <value>
            /s/login.jsp=anon
            /login=anon
                &lt;!&ndash;对资源进行权限控制,要控制的资源都应该从数据库查出
            /s/permission.jsp = perms[user:*]
            /**=authc
        </value>
    </property>-->
    <property name="filterChainDefinitionMap" ref="filterChainDefinitionMap" />
</bean>
<!--
    配置bean
    factory-bean:具体应用bean
    factory-method:调用里面的方法
-->
<bean id="filterChainDefinitionMap" factory-bean="filterChainDefinitionMapBuilder" factory-method="createFilterChainDefinitionMap" />
<bean id="filterChainDefinitionMapBuilder" class="cn.itsource.shiro.FilterChainDefinitionMapBuilder" />

5.2 准备一个构造器类

//得到Map
public class FilterChainDefinitionMapBuilder {
    public Map<String,String> createFilterChainDefinitionMap(){
        Map<String, String> map = new LinkedHashMap();
        map.put("/s/login.jsp","anon");
        map.put("/login","anon");
        //这个值之后从数据库中查询到【用户-角色-权限-资源】
        map.put("/s/permission.jsp","perms[user:*]");
        map.put("/**","authc");
        return  map;
    }
}
工业互联网工控安全与工业质检AI大模型建设方案.pptx 立即下载

相关推荐

2024 《计算机网络》实验教学指导书.doc

2024 《计算机网络》实验教学指导书.doc

Shiro_项目_权限判断&菜单配置

文章目录1 权限判断1.1 获取到所有的权限进行判断1.2 重写权限拦截器1.3 applicationContext-shiro.xml配置自定义拦截器1.4 MyRealm 进行权限判断2 菜单操作2.1 设计domain层2.1.1 配置menu类2.1.2 配置Permission类2.2 完成菜单显示功能2.2.1 MenuRepository类2.2.2 MenuServiceImpl...

Java_pipixia的博客 2471

不平衡电网下自抗扰顺序模型预测PWM整流器控制仿真模型(Simulink仿真实现)

内容概要:本文围绕面向城市空中交通的多无人机路径规划问题展开研究,提出了一套融合全局规划、动态避障与局部协同调整的综合路径规划方法。研究内容涵盖基于改进RRT算法与图论的全局路径规划、基于动态风险场和动态窗口法(DWA)的模型预测控制实现动态避障,以及基于分布式协同控制的多无人机局部路径协同策略。通过Matlab平台构建仿真环境,在多种典型城市交通场景下对所提方法进行了系统性验证,结果表明该方法在路径安全性、编队稳定性与任务效率方面表现优异。文章还深入探讨了算法的创新点与未来研究方向,为复杂城市环境下多无人机系统的自主协同提供了理论支撑与技术路径。; 适合人群:具备自动化、控制理论、计算机科学或相关领域基础知识,从事无人机系统、智能交通、路径规划、多智能体协同控制等方向研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①为城市空中交通系统中的多无人机安全、高效飞行提供可靠的路径规划解决方案;②支持在复杂、动态的城市场景中开展无人机自主导航、编队飞行与协同控制的技术研究与仿真验证。; 阅读建议:建议结合提供的Matlab代码进行实践操作,重点关注算法的具体实现细节、参数配置对性能的影响以及不同仿真场景下的实验设计,以深入理解各模块的集成逻辑与实际应用效果。

java_项目_EasyPoi导入与导出

文章目录1 Java操作Excel1.1 概念1.2 JXL与POI优缺点1.3 引入poi需要的jar包1.4 创建Excel(完成99乘法表)1.5 java读取Excel2 EasyPoi使用2.1 引入easypoi的jar包2.2 基本导出2. 3员工页面 Employee.jsp 加上导出按钮2.4 EmployeeController添加方法3 EasyPoi导入功能3.1 Impo...

Java_pipixia的博客 2282

MemSeg:一种差异和共性来检测图像表面缺陷的半监督方法

本文认为人为创建类内差异和保持类内共性可以帮助模型实现更好的缺陷检测能力,从而更好地区分非正常图像。如图一所示。差异(differences):MemSeg引入人工模拟的异常图像在训练阶段使模型能够区分正常和异常的图像,减轻了半监督学习只能用正常样本进行训练的不足,然后在推理阶段可以直接输入图像无需做任何后处理。共性(commonalities):MemSeg引入了一个记忆池来记录正常样本的通用模式,在训练和推理阶段,比较输入图像和记忆池中的样本之间的差异,为异常区域的定位提供有用的信息。

斯人若彩虹,遇上方知有! 4838

手把手教你用STM32F103C8T6驱动CLRC663国产NFC模块(兼容A/B/F/15693卡)

本文详细介绍了如何使用STM32F103C8T6驱动国产CLRC663 NFC模块,支持ISO14443A/B、Felica和ISO15693协议。从硬件设计、协议适配到状态监控,提供完整的工程实现方案,适用于智能门锁、支付终端等应用场景。

weixin_30689307的博客 445

RabbitMq

文章目录1.RabbitMQ概念1.1.基本概念1.2.RabbitMQ使用场景1.3.常见的消息队列2.RabbitMQ的原理2.1.原理图2.2.执行流程3.安装RabbitMQ3.1.安装erlang语音3.2.配置erlang的环境变量3.3.安装RabbitMQ3.4.安装RabbitMQ的可视化插件3.5.访问测试4.Rabbit的使用-helloworld4.1.helloworld...

Java_pipixia的博客 1841

瑞芯微RK3576上手实测:8nm新U配6TOPS NPU,做AIoT项目选它还是RK3588/RK3568?

本文深度评测瑞芯微RK3576芯片在中高端AIoT项目中的表现,对比RK3588和RK3568的性能差异。RK3576采用8nm工艺,配备6TOPS NPU,在解码能力、AI推理效率和功耗控制方面表现均衡,是中端项目的黄金选择。实测数据显示其在多路视频解码和AI加速性能上优势明显,特别适合智能摄像头和工业HMI设备。

weixin_42627853的博客 716

SpringBoot

文章目录1 SpringBoot介绍1.1 SpringBoot基本概念1.2 回顾Spring的IOC,DI,AOP2 Spring的注解配置2.1 Anno配置IOC2.1.1 创建Spring的配置类2.1.2 在配置类中定义Bean2.1.3 测试2.2 ComponentScan&ComponentScans自动扫描2.2.1 准备MyBean帖@Component2.2.2 创...

Java_pipixia的博客 1751

高频功率放大器的设计实现

摘 要 随着无线通信技术的高速发展,市场对射频电路的需求越来越大,同时对射频电路的性能要求也越来越高。高频功率放大器是位于无线发射级末端的重要部件,为了弥补信号在无线传输过程中的衰耗,要求发射机具有较大功率的输出,通信距离越远,要求的输出功率越大。在高频范围内,为了获得足够大的高频输出功率,就要采用高频功率放大器。 本次课程设计的高频功率放大器的技术指标包括输出功率、效率、功率增益、由于高频频功率放大器的输出功率比较大,耗能比较多,所以工作效率就显得比较重要。本课程设计的高频功率放大器电路由两极功率放大器

qq_43543515的博客 3万+

Vcenter安全加固-防火墙-只允许特定的IP地址访问Vcenter

3、此时除了被允许的IP地址可以访问之外,其余地址均被防火墙阻挡。2、再进行0.0.0.0/0匹配所有其他IP地址进行拒绝访问。1、只需要关注接受和拒绝即可。2、其余选择不是这个场景使用的。1.只允许特定的IP地址访问Vcenter。1、登录Vcenter管理界面。2、点击防火墙-添加。

博然的宝藏库 7277

Shiro_项目_审核入库订单&&库存预警&&发送邮件

文章目录1 进销存模块分类1.1 基本模块内容1.2 进销存核心模块2 进销存业务逻辑2.1 建立入库订单(组合关系、主从表)2.1.1 仓库2.1.2 入库订单:组合关系的一方2.1.3 入库订单明细:组合关系的多方2.1.4 即时库存2.2 级联保存2.2.1 导包2.2.2 保存测试2.3 审核采购入库单3 库存预警3.1 pom.xml添加jar文件3.2 任务调度/定时调度jar文件3....

Java_pipixia的博客 1724

计算电磁学(三)有限差分方法

有限差分方法(FDM)是一种数值处理方法,通过将偏微分方程变换为一组代数方程,通过求解代数方程组来得到原边值问题的近似值。由于有限差分法非常简单,所以也特别的稳定高效。其中时域有限差分方法(FDTD)是电磁分析中的常用方法。在计算电磁学中,常用有限差分方法(finite difference equations)来替代微分方程。一个有限差分法通常包括三个步骤将求解域划分网格用有限差分方程逼近给定的微分方程求解在给定边界条件和初始状态下的方程常用的网格模型方阵斜方阵三角阵圆形阵。

CCC_B的博客 1639

MyBatis增强

文章目录1 mapper映射1.1 准备接口 EmployeeMapper1.2 准备xml文件 EmployeeMapper.xml1.3 项目包的命名规范2 高级查询3 关系配置3.1 多对一3.1.1 domain准备3.1.2 关系映射 - 嵌套结果3.1.3 关系映射 - 嵌套查询3.2 一对多3.2.1 domain层3.2.2 嵌套结果3.2.3 嵌套查询4 SSM三大框架继承4....

Java_pipixia的博客 1303

康复训练监测系统:基于YOLOv8的患者动作规范识别

本文系统介绍了基于YOLOv8的康复训练动作规范识别系统,从理论背景、数据准备、模型训练、推理应用到UI界面,提供了完整技术链条及代码示范。希望对康复领域的智能监测应用提供参考和借鉴。

YOLO 453

C#对接EtherNet/IP协议 完整版|罗克韦尔AB PLC通信+CIP核心概念全解析

你做罗克韦尔(AB) PLC工业上位机开发,是唯一的首选协议,没有之一!EtherNet/IP(Ethernet Industrial Protocol)是基于标准以太网的工业级通信协议,由罗克韦尔自动化主导开发,是ODVA(开放设备网络供应商协会)主推的工业以太网标准,也是目前全球应用最广泛的工业以太网协议之一。原生适配罗克韦尔AB PLC:Micro800、CompactLogix、ControlLogix、Micro850等全系AB PLC原生标配EtherNet/IP,无需额外配置,开箱即用;

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 889

SpringCloud

文章目录微服务框架1 单体应用1.1 什么是单体应用1.2 单体应用的问题2 微服务架构2.1 什么是微服务架构2.2 微服务的优点2.3 微服务缺点2.4 SpringCloud简介2.5 SpringCloud和Dubbo的区别3 SpringCloud入门3.1 注册中心原理3.2 搭建注册中心3.2.1 创建多模块工程3.2.2 springcloud-parent管理依赖3.2.3 sp...

Java_pipixia的博客 1089

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

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

Aisell智能销售项目_总结

文章目录day1 集成SpringMVC&前端展示1 spring+springdatajpa搭建环境2 springmvc和spring集成3 创建repository-service-controller层day2 easyui结合项目完成CRUD1 新增2 修改3 新增和修改保存4 删除5 查询6 后台问题:day3 Shrio集成Spring&Authentication身...

Java_pipixia的博客 835

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

Nginx

文章目录1.Nginx相关概念1.1.什么是Nginx1.2.Nginx应用场景1.2.1.http 服务器1.2.2虚拟主机1.2.3.反向代理,负载均衡2.Nginx的安装2.1.安装Nginx2.2.Nginx目录结构2.3.Nginx配置文件3.Nginx做静态网站部署4.Nginx虚拟主机4.1.准备两个站点 目录4.2.修改配置4.3.重启访问5.域名5.1.域名解析步骤5.2.配置本...

Java_pipixia的博客 762

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

Shiro_项目_采购单

文章目录1 采购订单的模型分析2 代码实现2.1 一方(主表)2.2 多方(从表)2.3 Purchasebill 日期处理3 订单查询列表3.1 purchasebill.jsp3.2 purchasebill.js3.3 查询条件的添加4 添加修改 弹出对话框4.1 采购明细单4.2 明细单保存4.2.1 提交额外参数4.3 解决修改回显问题5 解决n-to-n问题 1 采购订单的模型分析 ...

Java_pipixia的博客 755

vue基础_day01

文章目录1 ECMAScript61.1 es6的认识1.2 es6常用语法1.2.1 let&const1.2.2 解构表达式1.2.3 箭头函数1.2.4 Promise1.2.5 模块化规范1.2.5.1 导出功能1.2.5.2 导入功能2 Vue入门2.1 什么是vue2.2 el,data与method2.2.1 使用Vue三步曲2.2.2 Vue的重要元素2.3 vue的钩子...

Java_pipixia的博客 753

Spring_SSJ集成

文章目录1 三大框架1.1 ssh1.2 ssm(最流行的框架)1.3 ssj(Spring springMvc jpa)2 Spring集成JPA2.1 加载jdbc.properties2.2 配置ApplicationContext.xml2.3 spring事物传播机制2.3.1 事物配置3 SpringMVC和spring集成或者整合3.1 配置web.xml3.2 配置Applicat...

Java_pipixia的博客 609

JPA进阶_day02

文章目录1 JPA主键生成策略1.1 主键介绍1.2 JPA标准策略有4种:2 JPA的状态2.1 JPA状态的含义2.2 脏数据更新2.2.1 执行流程分析2.3 n-to-n 问题2.4 持久对象(domain层)定义规则entityManager的方法改变持久对象的状态3 域对象之间的关系在这里插入图片描述3.1 域对象之间的关系3.2 单向多对一3.2.1 基本配置3.2.2 添加数据保存...

Java_pipixia的博客 583

Spring_构造注入&注解注入&代理模式&AOP

文章目录1 依赖注入1.1 依赖注入方式1.1.1 普通set注入1.2 数组注入1.3 List /Set Map 集合注入1.4 Properties 注入1.5 xml注入方式2 AOP2.1 什么是AOP2.2 AOP术语3 AOP实现3.1 添加aop命名空间3.2 前置增强(通知)3.3 环绕增强3.4 注解版4 AOP代理模式4.1静态与动态代理 1 依赖注入 概念: 一个类里面依赖...

Java_pipixia的博客 522
上一篇: SpringDataJpa
下一篇: shiro_项目_登录与权限验证
虞铭轩、
博客等级 码龄7年 3粉丝 38原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值