APEX内置验证与授权管理

参考博客:(真的很好的教程,感谢!)

09技术太卷我学APEX-定制页面及导航菜单权限_白龙马5217的博客-CSDN博客icon-default.png?t=N6B9https://blog.csdn.net/html5builder/article/details/128816236?spm=1001.2014.3001.5501

1 应用程序安全性设计

1.1 应用程序的验证/授权/会话管理

1.2 Apex 用户管理

需要在工作区管理项下创建用户,

1.3 用户访问控制

在【访问控制】-【用户】功能页设置领队的权限

定制页面与导航栏菜单权限

创建角色值列表

 select name, name as rname from role_test_wxx2

创建页面值列表

select t.PAGE_ID,t.PAGE_PARENT_ID
from TEST_USER_WXX_V t 
where APP_ID = :APP_ID;

创建用户值列表

用户和角色值列表配置到用户和角色。

 

 select name, name as uname from user_test_wxx2

创建导航卡“系统管理_导航卡_Demo”

创建成功

 点开还可以继续修改,设置图标

2 创建导航页面

Step 1创建空白页面
应用程序-创建页

 

 Setp 2放置列表区域
拖放一个列表区域到页面上,开始只能放到面包屑区域,放置后,在左边的结构树可以拖放到body区下面。

Setp 3设置列表区域属性

 导航卡之前

导航卡之后

3 创建授权方案

3.1 创建一个授权控制函数F_CONTROL

create or replace function "F_CONTROL"
(p_username in VARCHAR2,p_pageid in number)
return boolean
isb_ret boolean :=false;c_1 number;
beginselect count(1) into c_1 from test_user_wxx_vwhere user_name = p_username and page_id = p_pageid;if (c_1 >= 1) then b_ret := true;elseb_ret := false;end if;   return b_ret;exception when others thenreturn false; 
end;

3.2 创建授权方案

名称:随便自己输入
方案类型:返回布尔值的PL/SQL函数
PL/SQL函数体:传入当前登录用户和当前页面

return f_control(
  p_username => :USER_ID,
  p_pageid => :PAGE_ID
);
求值点:每次页访问一次

 有问题

4 页面授权控制

设置需求授权的页面设置安全性如下图:

 这样设置后,就是直接在IP地址栏输入页面也需求授权许可。

需要授权的都设置上授权方案:

5 导航授权控制

设计是这样没有,根据登录帐户,没有授权的页面链接就不在导航菜单上显示了。目前为静态导航菜单,需要引用静态导航菜单的数据创建一个动态的导航菜单。

5.1 创建静态导航菜单的视图test_menu_wxx_v

CREATE OR REPLACE FORCE EDITIONABLE VIEW "test_menu_wxx_v" ("PARENT_ENTRY_TEXT", "DISPLAY_SEQUENCE", "ENTRY_TEXT", "PAGE_ID", "ENTRY_TARGET") AS select parent_entry_text,display_sequence,entry_text,regexp_replace(entry_target,'[^0-9]') as page_id,entry_target	 
from apex_application_list_entries t
where application_id = 273 and list_id = 128816236
order by t.display_sequence

这里用到Oracle的正则表达式替换函数提取出目标的页面id:regexp_replace(entry_target,‘[^0-9]’) as page_id
视图的数据如下:

CREATE OR REPLACE FORCE EDITIONABLE VIEW "test_menu_wxx_v" ( "ROLE_NAME","PERM_NAME", "PAGE_ID") AS select ROLE_NAME,PERM_NAME,PAGE_IDregexp_replace(entry_target,'[^0-9]') as page_id,entry_target	 
from test_user_wxx_v t
where application_id = 273 and list_id = 128816236/17346944776181


5.2 创建动态导航菜单视图

自己的:

创建角色权限视图TEST_ROLE_PERM_WXX_V

-- 创建视图 角色权限
create view TEST_ROLE_PERM_WXX_V as
select distinct rp.ROLE_PERM_ID,rp.ROLE_ID as ROLE_ID,rp.PERM_ID as PERM_ID,rp.IS_ENABLE,rp.REMARK,r.NAME as ROLE_NAME,p.NAME as PERM_NAME,p.PAGE_ID as PAGE_ID
from ROLE_PERM_TEST_WXX rp
LEFT JOIN ROLE_TEST_WXX2 r on r.ROLE_ID = rp.ROLE_ID
LEFT JOIN PERM_TEST_WXX2 p on p.PERM_ID = rp.PERM_ID;

查询效果

创建角色用户视图 TEST_ROLE_USER_WXX_V

-- 创建角色用户视图 TEST_ROLE_USER_WXX_V
create view TEST_ROLE_USER_WXX_V as
select distinct ROLE_USER_ID,ru.ROLE_ID as ROLE_ID,ru.USER_ID as USER_ID,r.NAME as ROLE_NAME,u.NAME as USER_NAME,u.MOBILE,u.JOB_NUMBER,u.PASSWORD,u.EMAIL,u.DEVELOPER_ID
from ROLE_USER_TEST_WXX ru
LEFT JOIN ROLE_TEST_WXX2 r on r.ROLE_ID = ru.ROLE_ID
LEFT JOIN USER_TEST_WXX2 u on u.USER_ID = ru.USER_ID;

效果:

5.3 创建一个动态列表并设置为导航菜单test_menu_wxx_v

创建动态列表:

范例:

select * from ck_menu_v 
where page_id in (
    select distinct page_id from V_SYS_USER_ROLE_PAGE where user_name = :APP_USER
)
我的:

select * from TEST_USER_WXX_V where USER_NAME = :USER_NAME;

???为什么呀?百思不得其解

 不加条件查询到的数据

 代码:

select USER_ID,USER_NAME,DEPT_ID,DEPT_NAME,ROLE_ID,ROLE_NAME,PERM_ID,PERM_NAME,PAGE_ID from TEST_USER_WXX_V;

为什么传入一个user_name反而不行了?看来问题出在传入的user_name上

发现直接将值传入没问题

 代码

-- 动态列表 传入user_name
select USER_ID,DEPT_ID,DEPT_NAME,ROLE_ID,ROLE_NAME,PERM_ID,PERM_NAME,PAGE_ID
from TEST_USER_WXX_V where USER_NAME = 'user';

最终:test_menu_wxx_v

select USER_ID,DEPT_ID,DEPT_NAME,ROLE_ID,ROLE_NAME,PERM_ID,PERM_NAME,PAGE_IDfrom TEST_USER_WXX_V where USER_NAME = :USER_NAME;

设置以上动态列表为导航菜单:

 应用以后user普通用户果然只能打开首页,但是demo管理员用户也无法打开其他界面,坏了,紧急还原

看来还得好好学学登录后验证过程

验证过程3

--     登录后验证过程3
CREATE PROCEDURE TEST_USER_WXX3_PRO ASV_USER_ID    NUMBER(20);V_ROLE_ID    NUMBER(20);V_PERM_ID    NUMBER(20);V_DEPT_ID    NUMBER(20);V_USER_NAME     	NVARCHAR2(64);V_JOB_NUMBER 	NVARCHAR2(32);V_MOBILE    NVARCHAR2(32);V_EMAIL     NVARCHAR2(32);V_COUNT     NUMBER(10);V_ID        NUMBER(10);V_DEPT_NAME NVARCHAR2(64);V_PAGE_ID NUMBER(20);begin-- 获取用户基础信息SELECT DEPT_ID,ROLE_ID,PERM_ID,USER_ID,USER_NAME,JOB_NUMBER,MOBILE,EMAILINTO V_ROLE_ID,V_PERM_ID,V_USER_ID, V_USER_NAME, V_JOB_NUMBER, V_MOBILE, V_EMAILFROM  TEST_USER_WXX_Vwhere USER_NAME = upper(V('P9999_USERNAME'));-- 获取用户角色权限
SELECT COUNT(1)INTO V_COUNTFROM ROLE_USER_TEST_WXX ALEFT JOIN TEST_ROLE_PERM_WXX_V BON A.ROLE_ID = B.ROLE_IDWHERE A.USER_ID = V_USER_ID;SELECT nvl(max(ROLE_ID), 0), nvl(max(PERM_ID), 0)INTO V_ID, V_PAGE_IDFROM TEST_ROLE_PERM_WXX_VWHERE IS_ENABLE = 1;IF V_COUNT > 0 THENSELECT A.ROLE_ID, B.PERM_IDINTO V_ID, V_PAGE_IDFROM ROLE_USER_TEST_WXX ALEFT JOIN TEST_ROLE_PERM_WXX_V BON A.ROLE_ID = B.ROLE_IDWHERE A.USER_ID = V_USER_IDAND ROWNUM = 1;ELSEINSERT INTO ROLE_USER_TEST_WXX (USER_ID, ROLE_ID) VALUES (V_USER_ID, V_ID);COMMIT;END IF;-- 设置USERAPEX_CUSTOM_AUTH.SET_USER(V_USER_NAME);-- 将用户登入录信息注入session stateAPEX_UTIL.SET_SESSION_STATE('ROLE_ID', V_ID);APEX_UTIL.SET_SESSION_STATE('DEPT_ID', V_DEPT_ID);APEX_UTIL.SET_SESSION_STATE('USER_NAME', V_USER_NAME);APEX_UTIL.SET_SESSION_STATE('JOB_NUMBER', V_JOB_NUMBER);APEX_UTIL.SET_SESSION_STATE('MOBILE', V_MOBILE);APEX_UTIL.SET_SESSION_STATE('MAIL', V_EMAIL);APEX_UTIL.SET_SESSION_STATE('USER_ID', V_USER_ID);APEX_UTIL.SET_SESSION_STATE('DEPT_NAME', V_DEPT_NAME);
--     APEX_UTIL.SET_SESSION_STATE('USERID', V_USERID);
END;
/

遇到的问题

编译失败, 行 26 (15:42:45)
PL/SQL: ORA-00947: 没有足够的值编译失败, 行 17 (15:42:45)
PL/SQL: SQL Statement ignored

ORA-00947: 没有足够的值_ora00947没有足够的值_cbgYjch的博客-CSDN博客icon-default.png?t=N6B9https://blog.csdn.net/cbgYjch/article/details/116670031破案了,少数据项了

 最终校验过程3 TEST_USER_WXX3_PRO

create or replace PROCEDURE TEST_USER_WXX3_PRO ASV_USER_ID    NUMBER(20);V_ROLE_ID    NUMBER(20);V_PERM_ID    NUMBER(20);V_DEPT_ID    NUMBER(20);V_USER_NAME     	NVARCHAR2(64);V_JOB_NUMBER 	NVARCHAR2(32);V_MOBILE    NVARCHAR2(32);V_EMAIL     NVARCHAR2(32);V_COUNT     NUMBER(10);V_ID        NUMBER(10);V_DEPT_NAME NVARCHAR2(64);V_PAGE_ID NUMBER(20);begin-- 获取用户基础信息SELECT DEPT_ID,ROLE_ID,PERM_ID,USER_ID,USER_NAME,JOB_NUMBER,MOBILE,EMAILINTO V_DEPT_ID,V_ROLE_ID,V_PERM_ID,V_USER_ID, V_USER_NAME, V_JOB_NUMBER, V_MOBILE, V_EMAILFROM  TEST_USER_WXX_Vwhere USER_NAME = upper(V('P9999_USERNAME'));-- 获取用户角色权限
SELECT COUNT(1)INTO V_COUNTFROM TEST_USER_WXX_V ALEFT JOIN TEST_ROLE_PERM_WXX_V BON A.ROLE_ID = B.ROLE_IDWHERE A.USER_ID = V_USER_ID;SELECT nvl(max(ROLE_ID), 0), nvl(max(PERM_ID), 0)INTO V_ID, V_PAGE_IDFROM TEST_ROLE_PERM_WXX_VWHERE IS_ENABLE = 1;IF V_COUNT > 0 THENSELECT A.ROLE_ID, B.PERM_IDINTO V_ID, V_PAGE_IDFROM ROLE_USER_TEST_WXX ALEFT JOIN TEST_ROLE_PERM_WXX_V BON A.ROLE_ID = B.ROLE_IDWHERE A.USER_ID = V_USER_IDAND ROWNUM = 1;ELSEINSERT INTO ROLE_USER_TEST_WXX (USER_ID, ROLE_ID) VALUES (V_USER_ID, V_ID);COMMIT;END IF;-- 设置USERAPEX_CUSTOM_AUTH.SET_USER(V_USER_NAME);-- 将用户登入录信息注入session stateAPEX_UTIL.SET_SESSION_STATE('ROLE_ID', V_ID);APEX_UTIL.SET_SESSION_STATE('DEPT_ID', V_DEPT_ID);APEX_UTIL.SET_SESSION_STATE('USER_NAME', V_USER_NAME);APEX_UTIL.SET_SESSION_STATE('JOB_NUMBER', V_JOB_NUMBER);APEX_UTIL.SET_SESSION_STATE('MOBILE', V_MOBILE);APEX_UTIL.SET_SESSION_STATE('MAIL', V_EMAIL);APEX_UTIL.SET_SESSION_STATE('USER_ID', V_USER_ID);APEX_UTIL.SET_SESSION_STATE('DEPT_NAME', V_DEPT_NAME);
--     APEX_UTIL.SET_SESSION_STATE('USERID', V_USERID);
END;

成功编译

 到应用程序中验证

 坏了,还是一样的情况,无论是user普通用户还是demo管理员账号都能看到QAQ

 登录验证 TEST_LOGIN_WXX_FUN

-- 登录验证
create function TEST_LOGIN_WXX_FUN(p_username in varchar2,p_password in varchar2)return boolean
ast_jobnumber varchar2(20);t_password  varchar2(20);t_count     number(10);T_TENANT    NUMBER;
beginT_TENANT := apex_util.get_session_state('P9999_USER_TENANT');select count(1)into t_countfrom TEST_USER_WXX_Vwhere upper(MOBILE) = upper(p_username)and IS_LEAVE = 0;if t_count > 0 thenselect count(1) into t_count from TEST_USER_WXX_Vwhere MOBILE = upper(p_username);elseinsert into USER_TEST_WXX2(USER_ID,NAME,GENDER,MOBILE,JOB_NUMBER,PASSWORD,EMAIL,DEVELOPER_ID,IS_LEAVE,REMARK,UPDATE_DATE)select USER_ID,NAME,GENDER,MOBILE,JOB_NUMBER,PASSWORD,EMAIL,DEVELOPER_ID,IS_LEAVE,REMARK,0,SYSDATEFROM TEST_USER_WXX_VWHERE MOBILE = upper(p_username);COMMIT;update APEX_TENANT_USERSset PASSWORD = ENCRYPT_ENC('123456')where MOBILE = upper(p_username)AND TENANT_ID = T_TENANT;commit;select MOBILE, PASSWORDinto t_jobnumber,t_passwordfrom APEX_TENANT_USERSwhere MOBILE = upper(p_username)AND TENANT_ID = T_TENANT;--         apex_util.set_custom_auth_status(p_status => '手机号不存在');
--         return false;end if;if (t_jobnumber is null or t_password is null) thenapex_util.set_custom_auth_status(p_status => '手机号和密码不能为空');return false;elseif ENCRYPT_ENC(p_password) <> t_password thenapex_util.set_custom_auth_status(p_status => '手机号或密码错误');return false;elsereturn true;end if;end if;end;
/

【错误记录】ORA-00904: "USER_PASSWORD": 标识符无效编译失败

编译失败, 行 29 (16:33:51)
PL/SQL: ORA-00904: "USER_PASSWORD": 标识符无效编译失败, 行 23 (16:33:51)
PL/SQL: SQL Statement ignored

 

内置验证与授权

插个眼

之前 

之后​​​​​​​

 范例

 

 css

#APP_IMAGES#app-icon.css?version=#APP_VERSION#

REST URL

 oracle.dbtools.role.autorest.YWJA.TEST_USER_WXX3_PRO

 【错误记录】ora_sqlerrm: ORA-01403: 未找到任何数据

为什么产生ORA-01403

ORA-01403: 未找到任何数据 异常主要是由于SQL中使用了SELECT INTO 但是根据条件没有查询到结果引起.

 

TEST_USER_WXX3_PRO代码

create or replace PROCEDURE TEST_USER_WXX3_PRO ASV_USER_ID    NUMBER(20);V_ROLE_ID    NUMBER(20);V_PERM_ID    NUMBER(20);V_DEPT_ID    NUMBER(20);V_USER_NAME     	NVARCHAR2(64);V_JOB_NUMBER 	NVARCHAR2(32);V_MOBILE    NVARCHAR2(32);V_EMAIL     NVARCHAR2(32);V_COUNT     NUMBER(10);V_ID        NUMBER(10);V_DEPT_NAME NVARCHAR2(64);V_PAGE_ID NUMBER(20);begin-- 获取用户基础信息SELECT DEPT_ID,ROLE_ID,PERM_ID,USER_ID,USER_NAME,JOB_NUMBER,MOBILE,EMAILINTO V_DEPT_ID,V_ROLE_ID,V_PERM_ID,V_USER_ID, V_USER_NAME, V_JOB_NUMBER, V_MOBILE, V_EMAILFROM  TEST_USER_WXX_Vwhere USER_NAME = upper(V('P9999_USERNAME'));-- 获取用户角色权限
SELECT COUNT(1)INTO V_COUNTFROM TEST_USER_WXX_V ALEFT JOIN TEST_ROLE_PERM_WXX_V BON A.ROLE_ID = B.ROLE_IDWHERE A.USER_ID = V_USER_ID;SELECT nvl(max(ROLE_ID), 0), nvl(max(PERM_ID), 0)INTO V_ID, V_PAGE_IDFROM TEST_ROLE_PERM_WXX_VWHERE IS_ENABLE = 1;IF V_COUNT > 0 THENSELECT A.ROLE_ID, B.PERM_IDINTO V_ID, V_PAGE_IDFROM ROLE_USER_TEST_WXX ALEFT JOIN TEST_ROLE_PERM_WXX_V BON A.ROLE_ID = B.ROLE_IDWHERE A.USER_ID = V_USER_IDAND ROWNUM = 1;ELSEINSERT INTO ROLE_USER_TEST_WXX (USER_ID, ROLE_ID) VALUES (V_USER_ID, V_ID);COMMIT;END IF;-- 设置USERAPEX_CUSTOM_AUTH.SET_USER(V_USER_NAME);-- 将用户登入录信息注入session stateAPEX_UTIL.SET_SESSION_STATE('ROLE_ID', V_ID);APEX_UTIL.SET_SESSION_STATE('DEPT_ID', V_DEPT_ID);APEX_UTIL.SET_SESSION_STATE('USER_NAME', V_USER_NAME);APEX_UTIL.SET_SESSION_STATE('JOB_NUMBER', V_JOB_NUMBER);APEX_UTIL.SET_SESSION_STATE('MOBILE', V_MOBILE);APEX_UTIL.SET_SESSION_STATE('MAIL', V_EMAIL);APEX_UTIL.SET_SESSION_STATE('USER_ID', V_USER_ID);APEX_UTIL.SET_SESSION_STATE('DEPT_NAME', V_DEPT_NAME);
--     APEX_UTIL.SET_SESSION_STATE('USERID', V_USERID);
END;

 

导航菜单权限09

 按下之后会这样

回去查看了列表,是对的鸭,应该差了东西

 在每张表加上授权方案试试

表对应的页设计器→选中表→区域 安全性:自定义的方案

 测试一下↓

加上安全性授权方案以后直接消失不见,普通用户user也就算了,管理员demo也不行QAQ

找原因ing

1.

 2.

 3.修改PL/SQL函数体

之前:

return f_control(p_username => :USER_NAME,p_pageid => :PAGE_ID
);

之后:

return f_control(p_username => :APP_NAME,p_pageid => :APP_PAGE_ID
);

原来是还没配置完orz

之前

 之后

 测试一下:

 

 报的是我自定义的错误(标识方案违规时显示的错误消息)

应该是username和pageid未被传值

 

蒋老师小课堂

1.添加表单,源位置:本地数据库,类型一定要是SQL查询,不能是表/视图

2.PL/SQL开发和命名规范;

【错误记录】ORA-01733: 此处不允许虚拟列

解决方法:用自定义的修改进行添加即可

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/50343.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

海外网红营销中的创新技术与趋势:AI、AR和VR的应用探索

随着全球数字化时代的不断发展&#xff0c;互联网已经成为连接人们的桥梁&#xff0c;而社交媒体则在其中扮演着举足轻重的角色。在这个全球性的社交媒体网络中&#xff0c;海外网红以其独特的个人魅力和内容创作能力迅速崭露头角。而为了在竞争激烈的市场中脱颖而出&#xff0…

单片机(二)使用位移 让灯亮

一&#xff1a;硬件电路 P2 口&#xff1a; P2.0~ P2.7 是这些 I0 口 LED 阳极接 电源 &#xff0c; P20 口 为低电平 可以让 LED灯 亮 二&#xff1a;软件实现部分 两种 ① 通过循环 来展示从左 到右 #include "reg52.h"#define LED_PORT P2 // 定义单片机的P2端…

软考A计划-系统集成项目管理工程师-项目变更管理

点击跳转专栏>Unity3D特效百例点击跳转专栏>案例项目实战源码点击跳转专栏>游戏脚本-辅助自动化点击跳转专栏>Android控件全解手册点击跳转专栏>Scratch编程案例点击跳转>软考全系列点击跳转>蓝桥系列 &#x1f449;关于作者 专注于Android/Unity和各种游…

Nginx使用keepalived配置VIP

VIP常用于负载均衡的高可用&#xff0c;使用VIP可以给多个主机绑定一个IP&#xff0c;这样&#xff0c;当某个负载应用挂了之后&#xff0c;可以自动切到另一个负载。 我这里是在k8s环境中做的测试&#xff0c;集群中有6个节点&#xff0c;我给140和141两个节点配置VIP。 1. 安…

Python土力学与基础工程计算.PDF-压水试验

Python 求解代码如下&#xff1a; 1. import math 2. 3. # 输入参数 4. L 2.0 # 试验段长度&#xff0c;m 5. Q 120.0 # 第三阶段计算流量&#xff0c;L/min 6. p 1.5 # 第三阶段试验段压力&#xff0c;MPa 7. r0 0.05 # 钻孔半径&#xff0c;m 8. 9. # 计算透…

Docker 微服务实战

1. 通过IDEA新建一个普通微服务模块 1.1 建Module docker_boot 1.2 改写pom <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance&…

CDN、DNS、ADN、SCDN、DCDN、ECDN、PCDN、融合CDN傻傻分不清楚,一文全部搞懂

一、CDN是什么&#xff1f; CDN的全称是Content Delivery Network&#xff0c;即内容分发网络。其基本思路是尽可能避开互联网上有可能影响数据传输速度和稳定性的瓶颈和环节&#xff0c;使内容传输得更快、更稳定。通过在网络各处放置节点服务器所构成的在现有的互联网基础之…

1267. 统计参与通信的服务器

这里有一幅服务器分布图&#xff0c;服务器的位置标识在 m * n 的整数矩阵网格 grid 中&#xff0c;1 表示单元格上有服务器&#xff0c;0 表示没有。 如果两台服务器位于同一行或者同一列&#xff0c;我们就认为它们之间可以进行通信。 请你统计并返回能够与至少一台其他服务…

我是如何使用Spring Retry减少1000 行代码

使用 Spring Retry 重构代码的综合指南。 问题介绍 在我的日常工作中&#xff0c;我主要负责开发一个庞大的金融应用程序。当客户发送请求时&#xff0c;我们使用他们的用户 ID 从第三方服务获取他们的帐户信息&#xff0c;保存交易并更新缓存中的详细信息。尽管整个流程看起来…

Elasticsearch简介及安装

&#x1f353; 简介&#xff1a;java系列技术分享(&#x1f449;持续更新中…&#x1f525;) &#x1f353; 初衷:一起学习、一起进步、坚持不懈 &#x1f353; 如果文章内容有误与您的想法不一致,欢迎大家在评论区指正&#x1f64f; &#x1f353; 希望这篇文章对你有所帮助,欢…

H36M VS 3DPW datasets

1采集设备方面 H36M使用了高精度的多视角摄像机动态捕捉系统获得了非常准确和连贯的3D关节坐标标注。 3DPW使用了单目摄像机与IMU的复合传感系统进行采集,存在一定程度的标注噪声。 2场景环境方面 H36M主要针对室内定向动作,背景单一简洁。 3DPW重点是室外复杂环境中人的自…

Interlij IDEA 运行 ruoyi 后端项目。错误: 找不到或无法加载主类 com.ruoyi.auth.RuoYiAuthApplication

错误: 找不到或无法加载主类 com.ruoyi.auth.RuoYiAuthApplication 用了 IDEA运行&#xff0c;参考以下issue删除.idea目录也没有用 (官方文档写是用Eclipse运行&#xff09; 错误: 找不到或无法加载主类 com.ruoyi.auth.RuoYiAuthApplication Issue #I48N2X 若依/RuoYi-C…

前端:运用html+css+jquery.js实现截图游戏

前端:运用htmlcssjquery.js实现截图游戏 1. 前言2. 实现原理3. 参考代码和运行结果 1. 前言 最近在刷手机视频时&#xff0c;总是能刷到一个这样的视频&#xff0c;视频上是一个截图游戏&#xff0c;当图片上的某个片段正好在图片的正确位置时&#xff0c;暂停视频&#xff0c;…

回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测(多指标,多图)

回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09; 目录 回归预测 | MATLAB实现FA-ELM萤火虫算法优化极限学习机多输入单输出回归预测&#xff08;多指标&#xff0c;多图&#xff09;效果一览基本介绍…

Powershell NTP Server Windows 7,8,10,11,2012,2016,2019,2022

NTP前言 NTP服务器是用来使计算机时间同步化的一种协议,它可以使计算机对其服务器或时钟源(如石英钟、GPS等)做同步化,提供高精准度的时间校正(LAN上与标准间差小于1毫秒,WAN上几十毫秒),且可介由加密确认的方式来防止恶毒的协议1。 ntp 参考 w32tmpowershell参考 参考…

宠物赛道,用AI定制宠物头像搞钱项目教程

今天给大家介绍一个非常有趣&#xff0c;而粉丝价值又极高&#xff0c;用AI去定制宠物头像或合照的AI项目。 接触过宠物行业应该知道&#xff0c;获取1位铲屎官到私域&#xff0c;这类用户的价值是极高的&#xff0c;一个宠物粉&#xff0c;是连铲个屎都要花钱的&#xff0c;每…

怎样压缩mp4视频大小?

怎样压缩mp4视频大小&#xff1f;由于视频文件的体积通常比其他类型的文件更大&#xff0c;因此它们需要更多的存储空间来保存。但是&#xff0c;如果我们的设备、应用程序或平台不支持某些视频格式或分辨率&#xff0c;或者我们没有足够的存储空间来容纳这些大型视频文件&…

测试平台metersphere

metersphere可以做接口测试、UI测试、性能测试。 metersphere接口测试底层是jmeter&#xff0c;可以做API管理&#xff0c;快捷调试&#xff0c;接口用例管理&#xff0c;接口自动化场景执行一键选取用例范围&#xff0c;生成测试报告。 会用jmeter&#xff0c;metersphere会…

【Unity小技巧】最简单的UI设置适配方案,萌新必看

文章目录 前言导入素材开始一、页面适配方案二、侧边栏适配方法一方法二 参考完结 前言 这期来讲一个简单的UI设计方案&#xff0c;很多同学可能搞不懂锚点、轴心这些概念&#xff0c;导致做好的UI在别人的设备上&#xff0c;乱跑或者是重叠&#xff0c;或者是参加游戏老发时间…

自然语言处理在智能客服和聊天机器人中的应用

文章目录 1. 引言2. NLP基础2.1 词法分析2.2 语法分析2.3 语义理解2.4 情感分析 3. 智能客服中的应用3.1 自动问答3.2 意图识别3.3 情感分析与情绪识别 4. 聊天机器人中的应用4.1 对话生成4.2 上下文理解 5. 技术原理与挑战5.1 语言模型5.2 数据质量和多样性5.3 上下文理解 6. …