jhipster
修改了用户信息, 但是postman获取的仍然是旧的,问题出在repository里面的方法前面加了
@Cacheable(cacheNames = USERS_BY_LOGIN_CACHE)
这个不太好使, 去掉就行了。
最新后台编译命令: ./mvnw package -DskipTests -Pprod verify jib:dockerBuild
Windows下安装首先要下载Yarn,安装之前,还需要安装node.js, 安装完后yarn --version验证成功。接着yarn global add yo 安装Yeoman,这是是产生代码的。
接着yarn global add generator-jhipster安装angular 2版本的jhipster。
此处开始创建应用了:
创建一个目录jhipapp,打开命令行工具,cd jhipapp, 输入jhipster,出现一个界面:
选择应用类型,我选简单的Monolithic,应用的基本名称jhipapp,默认的java包名称com.james.myapp,选择验证类型,我选JWT authentication,数据库选MySql,使用Hibernate 2级缓存,用maven,选Search engine using Elasticsearch和API first development using swagger-codegen,选angular 4,语言选Chinese (Simplified),附加语言是English
最后在powershell中输入./mvnw开始下载,遇到node的错误,以及其他下载错误,估计和没有设置代理有关系
添加阿里云maven仓库镜像到C:\Users\James\.m2\settings.xml如下:
<mirror><id>nexus-aliyun</id><mirrorOf>*</mirrorOf><name>Nexus aliyun</name><url>http://maven.aliyun.com/nexus/content/groups/public</url>
</mirror>
下载依赖包成功。
但是连接数据库有抛了异常如下:
开头是java.sql.SQLException: Access denied for user 'root'@'localhost' (using password: NO), 我之前电脑上装了mysql 5.7,好久没有用了
进入C:\Program Files\MySQL\MySQL Server 5.7\bin, 命令行执行mysqld, 出现
MySQL Server 5.7\data\' (Errcode: 2 - No such file or directory)
错误,上网查,用了一个命令mysql --initialize生成data目录,然后再用mysqld顺利启动。
mysql启动之后,再用powershell调用./mvnw,结果还是mysql访问拒绝,查看了一下应用根目录下的pom.xml,有个设置mysql目录的地方,
在org.liquibase这一节下,设置了目录,但是还是报同样的错误,然后用intellij导入现有工程,选择自动导入maven项目(打钩),选择dev profile,按两次shift键查找password,
发现src/main/resources/config/application-dev.yml文件中可以设置密码,果断设上
重新./mvnw,新的错误发现不了数据库,用phpmyadmin创建一个空的数据库,设置排序规则utf8-general-cli,再次./mvnw,还有错误说8080端口已被占用。
Windows下普通命令行输入一下命令:
netstat -aon | find "8080"
再用taskmgr杀掉改pid,再次./mvnw成功!
如果需要前后端分离,分两步创建工程:
服务器端:
cd jhipback_end
jhipster --skip-client
cd jhipfront_end
jhipster --skip-server --db mysql --auth jwt
项目分离之后,运行时需要两个web server,前端调用api会映射到另外一套url,这个url前缀需要在
webpack.common.js文件里面修改SERVER_API_URL,比如:
SERVER_API_URL: `"http://localhost:8080/"`
后端也要设置CORS
前端调试:
如果单独用vscode调试angular4应用,需要安装Debugger for Chrome,安装完成后,如果想调试,先yarn start吧web启动起来,然后把端口改成9000,然后按F5调试,即可。
如果前后端没有分离,想在Intellij上同时调试前后端,请安装下面步骤:
1. 配置前端debug
第一步:在chrome上安装JetBrains IDE Support扩展
第二步:在Intellij里面建立一个新的Javascript Debug configuration
第三步:在第二步的基础上配置Javascript Debug 配置:主要是这是URL,如:http://localhost:9000/,然后再配置一下远程URL(可选步骤,主要找出index.html)
第四步:开始调试(可以同时在Intellij调试前后端)
2. 配置后端debug
就是一般的spring boot的debug,需要配置,网上一搜就是。
添加Entity:
打开https://start.jhipster.tech/jdl-studio
图形化方式,建好entity以及它们之间的关系(支持一对多,多对一,多对多,以及分页)
下载jdl文件到本地,然后输入下列命令:
jhipster import-jdl your-jdl-file.jh
就会在工程里面生成前后端以及entity代码。
如果只生成后端的entity代码:
jhipster import-jdl your-jdl-file.jh --skip-client
只生成前端的entity代码:
jhipster import-jdl your-jdl-file.jh --skip-server
默认情况下import-jdl会重新生成那些有改变的entities,如果想要所有的entities都重新生成一下,用到--force选项,要注意的是,这会覆盖所有本地的改动。
下面就一个ManyToOne的关系解释一下jdl语言的含义:
github上blog的例子:https://github.com/mraible/jhipster4-demo#generate-entities
relationship ManyToOne {
Entry{blog(name)} to Blog
}
花括号里面小写的blog是关系名称,就是生成的@Entity Entry代码里面private Blog blog;是成员变量名,
同时也是前端typescript代码class Entry里面的public成员变量名称。就是说jh文件里面的内容影响前后端
的代码。
圆括号()里面的内容(此处是name)只会影响前端,比如创建一个Entry,代表创建的form里面会让你选择
此Entry属于哪个blog,如果省略圆括号,默认显示blog的id;此处写name,name显示的是blog的名称。
上面是多对一,就是一个blog包含多个entry;如果采用一对多,采用如下方式:
relationship OneToMany {
Blog to Entry{blog(name) required}
}
或者
relationship OneToMany {
Blog{entry} to Entry{blog(name) required}
}
上面两种形式生成的代码一样,相对于多对一,Blog类里面多了一个Entry的集合类:
@OneToMany(mappedBy = "blog")
@JsonIgnore
@Cache(usage = CacheConcurrencyStrategy.NONSTRICT_READ_WRITE)
private Set<Entry> entries = new HashSet<>();
当添加一个entity是,在server端主要有下面这些更改:
1. 数据库schema的变动,两个xml,一个是create,另一个是加外键
2. Entity类
3. Jpa的repository接口
4. 控制器controller
5. elasticSearch的变化
6. 添加到cache
在前端主要是添加了一个module,i18n的翻译
在修改某个entity的过程中碰到一个错误,原因是我之前曾经直接改过mysql的表,错误如下:
Liquibase Validation Failed:
config/liquibase/changelog/20180124122638_added_entity_Examine.xml::20180124122638-1::jhipster was:xxxxxx
解决方案:到mysql里面执行:
UPDATE DATABASECHANGELOG SET MD5SUM=null WHERE ID='20180124122638-1';
更新generate-jhipster:
yarn global upgrade generator-jhipster
从jhipster 5.3.0开始npm为默认的包管理器了,而不是yarn
安装用:
npm install -g generator-hipter
更新应用目录下的angular/cli:
npm install --save-dev @angular/cli@latest
更新应用程序:
jhipster upgrade
据stackoverflow上最新的更新指南:
先更新generator-jhipster:
npm update -g generator-jhipster
然后到项目根目录下运行:
yo jhipster
如果想更新所有的entities:
yo jhipster --with-entities
我从4.13.1升级到4.14.3应用程序改变不大。
生成一个单独的前端应用之后,使用yarn start,运行前端程序,此时会在build/www/目录下生成一堆可运行的文件,把
nginx的root指定到这里,就可以运行了。
如果只想build, 而不想用yarn来启动,输入命令:
yarn run webpack:build
webpack:build是定义在package.json文件中scripts里面的任务,在该文件中还有其他的任务。其中start如下定义:
"start": "yarn run webpack:dev"
其中webpack:dev定义如下:
yarn run webpack-dev-server -- --config webpack/webpack.dev.js --progress --inline --hot --profile --port=9060 --watch-content-base
在Windows下,进入nginx安装目录,运行
start nginx就可以启动nginx
在powershell下运行./nginx -s quit关闭nginx
==================================================================================================================================
看来google的Angular系列走不长了,Vue是主流了现在,用yo命令更新generator-vuejs,
然后创建一个目录,用jhipster --blueprint vuejs来产生vue前端。
==========================================================================
既然jhipster面向angular2和spring boot, 理解他们的概念是必要的,下面是一些angular 2的一些基础知识:
angular cli是一个命令行工具,用它创建,测试,部署项目,cli由npm安装:
npm install -g @angular/cli 全局安装
装完之后就可以用各种cli的命令了,命令一般以ng开头,比如:
ng new my-app
到这一步,有可能会出现"Installing packages for tooling via npm", 然后一直停在那里似乎没有反应了,解决:
1.首先安装国内taobao的npm镜像:
npm config set registry https://registry.npm.taobao.org
配置后可以通过下面方式来验证是否成功:
npm config get registry
或npm info express
如果还有问题:
可以分两步走:
1. ng new my-app --skip-install
2. npm install
就可以了
cd my-app
ng serve --open // 启动server,监视文件修改,打开浏览器http://localhost:4200/
应用主要放在src目录下,其中两个文件tsconfig.app.json和tsconfig.spec.json使用配置typescript编译器的,用来编译app和单元测试。
src目录之外的文件都是辅助性的,用来支持构建项目的,需要熟悉的有:
node_modules/ 由node.js下载的第三方模块放在该目录下,这些第三方模块列举在
package.json文件中。
tsconfig.json IDE的TypeScript编译器配置, 我们知道TypeScript需要编译成javascript才能使用,TypeScript是面向对象的。
网上有很多吐槽angular2的(主要和react比较),比如需要需额外的语法,额外的语言(TypeScript),不过对于我这样的c++/C#背景的程序员来说,
TypeScript的面向对象特点以及对于Google的信任,其他都不重要了,不需要学习Javacript这个变态的语言了(想象一下this在闭包里面的使用)。
熟悉Angular2几个重要而且容易混淆的感念很重要:
1. imports
在Module的ts文件,你会两次看到imports,一个在文件顶部,一个在@NgModule()的括号内,
顶部的imports是TypeScript的语法,凡是出现在文件下方的标识符都需要imports进来。
@NgModule内的imports是把本Module要用到的其他Modules的输出声明引入进来。
2. service 服务
service一般用来和远程的service打交道,比如和后台web api, 不需要和html关联,但是service一般需要依赖别的库来共同作用,所以metadata的修饰符是
@Injectable。
service不用new创建,而是在私有构造函数里注入,通过provider创建。
服务一般从远程取数据,多用异步操作,一般返回Promise或者Observable, HttpClient的get方法就返回Observable,这个是在rxjs库中定义的
用ng cli生成app范围内的服务:
ng generate service message --module=app
3. routing 前端路由
routing的输入就是URL,经过routing之后,能够调出相应的view进行展示。
就是说routing一边解释URL,一边取出相应的component(和某个view关联)进行展示。
比如点击了一个a元素,会导致URL改变,这时routing截取改变之后的URL,进行分析,然后找出相关联的view展示。
routing是一个单例的服务。由forRoot函数配置。forRoot的名字也意味着路由是在应用程序的root级别进行配置的。
配置时,url前面不需要加/,但是在使用routerLink时需要加/.
在配置routing之前,必须把<base href="/">加为index.html <head>的第一个子节点。
在需要routing的地方使用routerLink指令。
routerLink的值可以为单个字符串,也可以是数组(带参数的):
<a routerLink="/hero">AAA</a>
<a [routerLink]=["/hero", hero.id]>BBB</a>
4. 不直观的概念
4.1 OnInit,你以为是函数,却是一个interface。
大坑:用angular-cli打包,之前有个程序用的较老的nodejs生成的angular4工程,package.json里面好多angular组件是4.3.4版本,用
ng build 命令打包失败,失败信息如下:
添加bootstrap4到ng cli项目中:
首先用npm下载bootstrap:
npm install jquery --save
npm install popper.js --save
npm insall bootstrap@next --save
然后把必须的脚本文件加到apps[0].scripts中(.angular-cli.json文件中)
"scripts": ["../node_modules/jquery/dist/jquery.slim.js","../node_modules/popper.js/dist/umd/popper.js","../node_modules/bootstrap/dist/js/bootstrap.js"
],
最后把bootstrap CSS加到apps[0].styles中(.angular-cli.json文件中)
"styles": ["../node_modules/bootstrap/dist/css/bootstrap.css","styles.css"
],
Angular4的日期等等默认语言都是美国英语,如果想要支持中文,请用下列命令起server:
ng serve --aot --locale zh --open // 主要是--locale zh
如果不想用aot二用JIT,请在app.module.ts里面import {LOCALE_ID} from '@angular/core';
然后再@NgModule里面的providers数组里面添加:
providers: [{provide: LOCALE_ID, useValue: 'zh'}],
用ng cli直接生成component:
ng generate component hero-detail
==========================================================================================================
前后端分离,Centos环境,64位,Centos 7,首先安装wget
yum install wget
安装epel 阿里云源:
将下载的文件存放到指定的文件夹下,同时重命名下载的文件,利用-O:
wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
更新一下yum缓存
yum clean all
yum makecache
把james用户加到sudoer组里面(wheel组)
root登陆,然后
usermod -aG wheel james
然后安装nginx
sudo yum install nginx 速度飞快啊
systemctl是一个systemd工具,主要负责控制systemd系统和服务管理器
Nginx不会自己启动,用下面命令:
sudo systemctl start nginx
然后查一下centos的ip:
ifconfig -a,提示ifconfig command not found
安装网络工具:
sudo yum install net-tools
再次http://192.168.5.119提示可能防火墙问题,打开防火墙的http:
sudo firewall-cmd --permanent --zone=public --add-service=http
sudo firewall-cmd --reload
再次访问,成功
如果想机器启动时自动启动nginx:
sudo systemctl enable nginx成功创建一个符号链接
Created symlink from /etc/systemd/system/multi-user.target.wants/nginx.service to /usr/lib/systemd/system/nginx.service
当nginx用sudo启动时,系统起一个master进程,用户是root;一个worker进程,用户是nginx,这个nginx用户在nginx.conf文件里面指定。
nginx需要监听80或者443端口,而只有root进程才能监听小于1024的端口,所以master作为root启动。
为了以后干活容易,(考虑以后部署apache,nginx),需要创建一个group,名字就叫www-data:
sudo groupadd www-data
把nginx用户加到www-data组里面,并设为primary group
usermod -g www-data nginx
删除组:
groupdel www-data
列举所有的组:
cat /etc/group
查看用户组的情况:
groups nginx
循环改变目录的owner和group:
chown -R nginx:www-data /var/www
查看某个路径的权限:
namei -om /var/www
如果取消自动启动nginx:
sodu systemctl disable nginx
查看哪些服务开机自启动:
systemctl list-unit-files --type=service
停止nginx服务:
sodu systemctl nginx stop
查看nginx安装在哪里了:
find / -name nginx
软件安装在/usr/sbin/nginx
web应用应该放在
/usr/share/nginx下面
日志文件在/var/log/nginx目录下
pid文件在/var/run目录下:nginx.pid
nginx安装程序会创建一个nginx用户,列举系统所有用户指令查看:
cat /etc/passwd
查看运行的服务是哪个用户启动的指令:
ps aux | grep nginx
返回所有运行的进程名字中包含nginx。并搜索nginx进程,第一列就是运行那个进程的用户名。
复制目录内所有文件到另外一个目录下:
cp /home/james/dist/* /var/www/nginx/
目录改名:
mv /var/www/nginx /var/www/nginx_
强制删除目录以及目录里面的文件:
rm -rf /var/www/nginx
Centos默认情况下Selinux是Enforcing的,nginx默认的网站目录是/usr/share/nginx/html, 如果改为其他目录,
除了设定owner和group的权限之外,还要设定该目录的selinux安全性文本(或者改为宽容模式 setenforce Permissive):
chcon -R -u system_u -t httpd_sys_content_t /var/www/nginx
查看selinux的模式:
getenforce
观察nginx的安全性文本数据(主要是 -Z):
ps aux -Z | grep nginx
安装nodejs和npm:
sudo yum install nodejs
sudo yum remove nodejs // 卸载
sudo yum update // 更新所有系统中已经安装的包
sudo yum list nodejs // 列举可用的nodejs
centos设置npm淘宝镜像:
npm configset registry https://registry.npm.taobao.org
=========================================================
安装jre 8u152,先从oracle网站上下载rpm 64位包,通过WinSCP上传到james目录,
sudo chmod u+x jre-8u152-linux-x64.rpm
sudo yum install jre-8u152-linux-x64.rpm
sudo find / -name java
如果查找同时列出文件属性:
find / -name java | xargs ls -l
java -version 查看版本
如果系统中有多个java版本,用
alternatives --config java 来选择一个默认的java
此命令中的+号表示手动选择的,*号表示自动默认的
如果添加一个OpenJDK,用下面命令:
sudo alternatives --install /usr/bin/java java /usr/lib/jvm/jre-1.6.0-openjdk/bin/java 2000
最后面是优先级,数字越大,优先级越高
还有一个有用的选项是--display,显示可用的alternatives
sudo alternatives --display java
设置JAVA_HOME
先用update-alternatives --config java列举一下java都安装在哪里
然后打开
sudo vim /etc/profile在最后一行添加:
export JAVA_HOME="/usr/java/jre1.8.0_152"
保存退出, 注意JAVA_HOME的路径是不带bin的
用下面命令重新加载/etc/profile文件,修改立即生效。
source /etc/profile
用echo $JAVA_HOME查看一下有没有设置成功。
=========================================================
安装mysql community server版本
本来想从mysql网站上直接下载一个64位rpm包到Windows上,然后再上传到CentOs上,但是安装过程中报错,说有什么client的依赖。
所以不能这么安装,可以用yum repository的方法安装:
首先添加MySQL yum repositories:
wget https://dev.mysql.com/get/mysql57-community-release-el7-11.noarch.rpm
文件名mysql57-community-release-el7-11.noarch.rpm可以在https://dev.mysql.com/downloads/repo/yum/网页上看到
下载完成后用md5校验一下,保证下载的包是好的
md5sum mysql57-community-release-el7-11.noarch.rpm
然后比较生成的md5字符串是否和网页上面的一样
运行:
sudo rpm -ivh mysql57-community-release-el7-11.noarch.rpm
添加yum仓库
这时,可以正式安装mysql了:
sudo yum install mysql-server
出现提示直接按y确认
mysql -V
启动msyqld守护进程:
sudo systemctl start mysqld
查看mysqld状态:
sudo systemctl status mysqld
在安装过程中,root用户会有一个临时密码再/var/log/mysqld.log里面,这个密码需要记住:
sudo grep 'temporary password' /var/log/mysqld.log
下面为初次使用mysql前的配置,包括修改密码,删除临时数据库,禁止远程root登录等
执行安全脚本:
sudo mysql_secure_installation
输入新的密码,输入之后,立即有个反馈信息,然后立即又会让你再次修改,这次选No
然后一直按Y就可以结束整个安装。
安装完成后,测试一下
mysqladmin -u root -p version
列举已经安装的数据库:
show databases;
列举表:
use first_spring;
show tables;
删除数据库,需要在bash提示符下:
mysqladmin -u root -p drop first_spring;
或者mysql -u root -p登录后
drop database first_spring;
列举所有mysql用户:
select user, host from mysql.user;
创建用户,不限localhost
create user james identified by 'xxx';
在spring boot项目中添加mysql支持:
如果是用gradle,添加
compile 'mysql:mysql-connector-java'
如果是maven,添加
<dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId>
</dependency>
然后在application.properties文件中添加下面几行:
spring.jpa.hibernate.ddl-auto=create
spring.datasource.url=jdbc:mysql://localhost:3306/db_example
spring.datasource.username=james
spring.datasource.password=password
ddl-auto有好几个选项:none,update,create,create-drop,对于mysql来说默认是none,在产品环境下也请选择none
选择create就是由Entity来创建数据库schema。
=========================================================
安装mongodb,数据分析时候用,
mongodb的包mongodb-org包含4个包:
mongodb-org-server
mongodb-org-mongos 包含mongos deamon
mongodb-org-shell 包含mongo shell
mongodb-org-tools 包含一些工具:mongoimport, bsondump, mongodump, mongoexport, mongofiles, mongoperf, mongorestore, mongostat, mongotop
安装之前,先建立一个文件/etc/yum.repos.d/mongodb-org-3.6.repo, 输入以下内容:
[mongodb-org-3.6]
name=MongoDB Repository
baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/3.6/x86_64/
gpgcheck=1
enabled=1
gpgkey=https://www.mongodb.org/static/pgp/server-3.6.asc
保存退出,输入
sudo yum install -y mongodb-org
安装完成之后,如果在Centos系统上,需要处理Selinux,开放tcp端口27017,这个端口是mongodb用的:
sudo semanage port -a -t mongod_port_t -p tcp 27017
如果找不到semanage命令,按以下步骤安装:
1. yum provides /usr/sbin/semanage 看看那个包提供了文件/usr/sbin/semanage
2. yum -y install policycoreutils-python
安装完mongodb后,启动mongodb:
sudo service mongod start
设置开机启动:
sudo chkconfig mongod on
停止mongodb:
sudo service mongod stop
Windows 10下输入一下命令:
mongod.exe --dbpath d:\mongodb\data
创建来用户名和密码的数据库:
1. 不带访问控制启动mongodb
mongod --port 27017 --dbpath /data/db
2. 连接到实例
mongo --port 27017
3. 创建用户管理员(在admin数据库中)
use admin
db.createUser({user: "myUserAdmin",pwd: "abc123",roles: [ { role: "userAdminAnyDatabase", db: "admin" } ]}
)
4. 带访问控制重启mongodb
mongod --auth --port 27017 --dbpath /data/db
5. 作为用户管理员连接到admin
mongo --port 27017 -u "myUserAdmin" -p "abc123" --authenticationDatabase "admin"
6. 为产品创建用户(在test数据库中)
use test
db.createUser({user: "myTester",pwd: "xyz123",roles: [ { role: "readWrite", db: "test" },{ role: "read", db: "reporting" } ]}
)
7. 用myTester连接到test数据库
mongo --port 27017 -u "myTester" -p "xyz123" --authenticationDatabase "test"
=========================================================
再来看看spring boot, 用Idea创建一个spring boot程序,maven构建,在application.properties文件中,更改端口
server.port = 8080
然后在包含main函数的那个文件右键选择run。。。
spring security的验证功能:
用户登录时发个post请求上来,在请求的body里面带上来用户名和密码,服务器端用jackson的ObjectMapper类的
readValue(stream, User.class)由json对象创建一个User对象,然后把这个User对象传给
AuthenticationManager的authenticate函数进行验证,该函数返回一个Authentication对象
这个对象是一个经过完全验证的对象,该对象包含凭据(credentials)
以上过程主要是在
UsernamePasswordAuthenticationFilter的attemptAuthentication函数中进行的验证成功之后,下一步服务器就要生成一个jwt给浏览器了,过程如下
上一步验证成功之后,调用successfulAuthentication函数产生jwt,具体使用Jwts类设置Subject,
设置过期时间(比如10天),在用签名算法(比如HS12,HMAC using SHA-512)进行签名得到一个JWS,
最后调用一个compact函数实际构建JWT字符串,这个字符串是URL安全的,就是能作为URL的一部分传来传去的。
注意HMAC和电脑的MAC地址没有关系,全称是HASH-based Message Authentication Code
然后把产生的jwt加上前缀Bearer 作为头Authorization的值传给浏览器。
以上过程是在
UsernamePasswordAuthenticationFilter的successfulAuthentication函数中进行的
经过上面二个过程,客户通过验证了,服务器也下发了jwt了。后续的来自浏览器的请求需要带上这个jwt到服务器,
服务器需要验证这个jwt是不是有效的token,这个过程叫做授权Authorization:
通过派生一个BasicAuthenticationFilter类实现我们的授权过程,为什么要派生自BasicAuthenticationFilter呢?
因为派生的话,Spring就会知道这个授权过程在filter链条中处于什么位置,并把我们的派生filter替换掉原来的filter。
授权过程先要解析jwt,主要由helper类Jwts来完成,解析完成后得到一个用户名称(username),然后由这个username
构造一个Authentication的实例,这个实例的类型是UsernamePasswordAuthenticationToken类,这个过程叫做对jwt进行有效性验证:
validation,如果所有的东西都各就各位了,我们就把jwt抽取出来的用户置于spring的安全上下文中,意味着
用户的请求可以向前移动了,那就是真正的业务处理了,包括增删改查等等。
上面重载的两个类还不够,spring不会自动加载我们重载的类,需要我们告诉spring加载并替换原来的filter,
这个需要我们从WebSecurityConfigurerAdapter类派生一个类:例如叫WebSecurity,并且需要加上@EnableWebSecurity,
这样就能利用spring security提供的web安全配置相关的功能了。
在这个类中主要重载了两个函数:
configure(HttpSecurity http)
configure(AuthenticationManagerBuilder auth)
在第一个函数中配置哪些资源是公开的,哪些是需要保护的(就是确保是授权用户,输入了正确的用户名和密码)。添加上面重载的两个
Filter;
是否需要支持跨域资源共享(CORS, Cross-Origin Resource Sharing),这是通过HttpSecurity.cors()函数来得到:
cors函数用于添加CorsFilter,如果提供了一个名称为corsFilters的Bean,则使用这个Bean;如果没有,再看看
有没有定义corsConfigurationSource的Bean,如果有则使用。否则如果使用了Spring MVC,使用HandlerMappingIntrospector类实例来获取
请求中的CORS 配置。
第二个函数中。基于我们定义的一个UserDetailsService添加Authentication。这个UserDetailsService是用spring安全框架使用来加载
和用户相关的数据,一般是从数据库中获取。比如,数据库中保存的经过加密的密码(这个需要一个加密方法以便对上传的密码加密之后
再和数据库中保存的密码进行比对),所以我们
还需要提供一个加密的Bean,这个一般是BCryptPasswordEncoder.
在WebSecurity类中还需要定义一个corsConfigurationSource的Bean,如前所述,用来配置cors的,可以配置成允许任何来源的请求
(/**)
接着来看下UserDetailsService接口的实现:
该类主要有个重载函数:
loadUserByUsername,该函数返回一个UserDetails类,该类是spring security框架中的User类的接口
该接口定义了一些方法:
1. 获取授权列表
2. 获取密码
3. 获取用户名
4. 账号是否过期
5. 账号是否锁定
6. 凭据是否过期
7. 用户是否enable
这个函数调用一个比较有趣的函数,这个函数没有写代码(是一个接口函数),叫做findByUsername,为什么这个接口函数没有实现
还能调用呢,这就涉及到JpaRepository的细节了,因为接口是从JpaRepository派生的,JpaRepository支持接口规范方法名查询,即,如果
在接口中定义的方法名称符合命名规范,就可以不写实现,下面列举两个例子:
Keyword | Sample | JPQL snippet |
IsNotNull | findByAgeNotNull | ... where x.age not null |
Like | findByNameLike | ... where x.name like ?1 |
findByUsername会先去掉前缀findBy,剩下Username,如果Username是Entity的一个属性,就按照Username进行查询。
感觉Spring有些过了,规则太多,不太直观,造成学习困难,因为要记的东西太多。
=========================================================
有时候碰到什么概念不理解,需要建一个简单的web应用实践一下,但是以前如果想建一个这样的工程是相当麻烦的,这一点
要给Visual Studio一万个赞。一个web应用需要具备一下几个功能:
1. 浏览器有页面显示
2. 有restful
3. 支持一种模板语言(freemarker)
4. 后端java,要有mvc,
5. 能响应rest以及正常的request请求
6. 支持javascript和jquery
7. 需要servlet container,比如apache tomcat
下面介绍一个最简单快捷的方法:
用Intellij创建一个spring boot initializer应用,选择Web和Freemarker, maven
在生成的框架代码里面,template下面添加一个hello.html, 在static目录下添加一个hello.js
打开pom.xml文件添加webjars依赖,这样不需要下载jquery放进代码目录里面
把jquery和hello.js的引用添加到html的body下部:
<script type="text/javascript" src="webjars/jquery/3.2.1/jquery.min.js"></script>
<script type="text/javascript" src="js/hello.js"></script>
注意script这个tag千万不要写成<script xxxx/>, 而要写成<script xxxx></script>
血的教训,浪费好几个小时
body里面添加一个button和一个div, id为response-panel
然后在hello.js里面发起一个ajax的get请求:
$.ajax({type: 'GET', url: 'list', async: 'true', data: dataSet, processData: 'true', contentType: 'application/json',
success: function(data, status, xhr) {
var auth = xhr.getRespnoseHeader('Authorization');
document.cookie = "name-" + auth + ";expires=30";
_response.html(JSON.stringify(data, true, 2));
}
然后在后端HelloCotroller.java里面定义controller
两个函数:一个hello,一个list, hello返回主页面,list是restful请求
@RequestMapping("/hello")public String hello(HttpServletResponse servletResponse, Model model, @RequestParam(name="name", value = "", defaultValue = "Welcome") String name) {model.addAttribute("name", name);servletResponse.addCookie((new Cookie("foo", "bar")));return "hello";}@ResponseBody@RequestMapping(value="/list", method= RequestMethod.GET, consumes = MediaType.APPLICATION_JSON_VALUE)public List<String> list(HttpServletResponse servletResponse, @ModelAttribute("username") String username, @RequestParam("password") String password) {servletResponse.addHeader("Authorization", "jamessecurity");java.util.List<String> response = new ArrayList<String>();response.add(username);response.add(password);return response;}
然后再把hello.html改名为hello.ftl文件,编译,运行。
对于maven项目,如果要部署,先打包成jar文件:
mvn package
然后运行:
java -jar target/xxx.jar
如果用gradle,先打包:
./gradlew build
然后运行:
java -jar build/libs/xxx.jar
在Centos 7运行spring boot的web应用程序:
现在Windows上用Maven打好包,然后通过WinSCP上传到james用户的家目录,然后
chmod 755 xxx.jar
java -jar xxx.jar
看到程序运行,然后在Windows上打开浏览器,输入192.168.1.87:8086没反应,提示可能是防火墙问题
用putty, root用户登录,发出下面指令打开端口8086:
firewall-cmd --permanent --add-port=8086/tcp
firewall-cmd --reload
打开端口成功,然后在浏览器输入:
http://192.168.1.87:8086/greeting看到restfull响应,成功。
作为服务来运行spring boot 完全自执行包(所有依赖都在包内部):
首先在pom.xml的spring-boot-maven-plugin下面加上:
<configuration><executable>true</executable>
</configuration>
修改项目的<version>为1.0.0,然后mvn package打包到target子目录中
WinSCP上传到james家目录下面james-web-1.0.0.jar并且chmod 755 james-web-1.0.0.jar
假定这个jar包放到/var/jamesweb目录下(安装), 在/etc/systemd/system目录下创建一个文件jamesweb.service(用vim编辑):
[Unit]
Description=james-web-1.0.0.jar
After=syslog.target[Service]
User=myapp
ExecStart=/var/jamesweb/james-web-1.0.0.jar
SuccessExitStatus=143[Install]
WantedBy=multi-user.target
然后sudo cp james-web-1.0.0.jar /var/jamesweb/james-web-1.0.0.jar把jar文件复制到/var/jamesweb目录下
启动服务
sudo systemctl start jamesweb.service
设定开机自启动
sudo systemctl enable jamesweb.service
超级简单
=========================================================
vim常用指令:
显示行号: :set nu
删除光标处一行 dd
撤销 u
重做 Ctrl + r
移动到文件第一行 gg
移动到最后一行 G
移动到第几行 nG, n是数字
将第3行至第4行的数据,复制到第8行后面 :3,4 co 8
将第3行至第4行的数据,移动到第8行后面 :3,4 m 8
多行删除,在命令模式, 按大写的V进行视觉模式,然后上下移动光标到多行,然后按x或者d删除
移动到下一个单词的结尾 e,下一个单词的开始 w, 前一个单词的开始 b
删除光标开始处的5个单词 5dw
删除光标处到行尾:d$
打开多个文件: 用:tabe <filepath>
切换到下一个tab: :tabp
切换到前一个tab: :tabn
映射F7键到tabp: :nmap <F7> :tabp <CR>
映射F8键到tabn: :nmap <F8> :tabn <CR>
复制3行到另外一个文件:
3yy,切换到另一个文件,p
往下翻页:Ctrl + f
往前翻页:Ctrl + b
复制文件到另一个文件:cp temp.txt foo/temp2.txt
复制文件到另一个目录:cp temp.txt foo
查看一个文件内容:cat more less
linux开启8080端口:
首先查询哪些程序开启了哪些端口:
netstat -tulnp
t:tcp, u:udp, l:listening port, n:numberic address, p:监听的程序
===============================================================
html5相关:
引用块级文本:blockquote
引用行内文本:q
===============================================================
javascript相关:
5种基本类型值:Undefined, null, boolean, number, string
===============================================================
intellij常用命令:
按住Ctrl键再把鼠标放到一个函数或者类名上,会显示简单信息
Ctrl+E 显示近期打开的一些文档
================================================================
前端的各种路径:
html的路径
info/index.html
表示在当前文件所在目录中有个文件夹叫info,里面的index.html文件
如果在网站的根文件夹目录下有个img目录(里面有个文件index.html),但是根文件夹是目前所在目录往上二级父目录../../
../../img/index.html这样不太好,可以在最开始使用一个斜杠表示根目录,这样/img/index.html
当URL以一个目录结尾(可以包含一个结尾的斜杠,也可以不包含),指的是路径中最后一个目录中的默认文件,通常为index.html
锚的路径
如果锚位于另一个文档,就使用<a href ="page.html#anchor-name"> 引用该区域。( 在URL 和# 之间没有空格。) 如
果锚位于另一台服务器上的页面,则需输入<a href="http://www.site.com/directory/page.html#anchor-name">
================================================================
一些开发技巧:
开发过程中disable chrome cache, F12打开开发工具,点击Network,勾选就行,需要注意,禁掉cache只在开发工具打开的时候
如若内容造成侵权/违法违规/事实不符,请联系编程学习网邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
相关文章
- vue-cliwebpackarcgis API For JS的天坑之路(一)
写在前面的话(背景交代) 最近参加esri比赛,但是又想趁机接触前端最新的一些框架和技术,所以,毅然决然的踏上了这个天坑之路。我现在只是成功的把地图渲染出来了,所以,我也不知道会不会有天坑二…...
2024/4/21 4:04:37 - 最新Angular2案例rebirth开源
在过去的几年时间里,Angular1.x显然是非常成功的。但由于最初的架构设计和Web标准的快速发展,逐渐的显现出它的滞后和不适应。这些问题包括性能瓶颈、滞后于极速发展的Web标准、移动化多平台应用,学习难度等。 所以Angular团队最终决定以全新…...
2024/4/21 4:04:37 - Angular 2 实验1:Windows 7上安装执行环境
2017-04-12 补充说明: 默认安装了 python-2.7.13.amd64.msi 之后,执行下面的命令,提示【VCBuild.exe】不存在,要求 npm install 1提示错误: MSBUILD : error MSB3428: 未能加载 Visual C 组件“VCBuild.exe”。要解决此…...
2024/5/7 8:01:09 - Angular UT : karma+jasmine+puppeteer 遇到的神坑!!!希望帮助到大家
1. puppeteer安装失败原因 puppeteer是个啥在这就不多加赘述了,这里重点讲的是puppeteer安装失败的问题 国内的小伙伴们使用puppeteer的时候应该都遇到这个问题,puppeteer会绑定最新版本的Chromium,使用 npm i puppeteer 安装时下载速度之慢࿰…...
2024/5/3 9:15:30 - 前端每周清单第 13 期:Webpack CLI 发布、解密现代浏览器引擎构建之道
前端每周清单第 13 期:Webpack CLI 发布、Angular 5 可期待的新特性、解密现代浏览器引擎构建之道 为InfoQ中文站特供稿件,首发地址为这里;如需转载,请与InfoQ中文站联系。从属于笔者的 Web 前端入门与工程实践的前端每周清单系列…...
2024/4/21 4:04:33 - Angular 从 0 到 1 (五)史上最简单的 Angular 教程
第一节:初识Angular-CLI第二节:登录组件的构建第三节:建立一个待办事项应用第四节:进化!模块化你的应用第五节:多用户版本的待办事项应用第六节:使用第三方样式库及模块优化用第七节:…...
2024/4/20 17:46:09 - 2016我的心路历程:从 Vue 到 Webpack 到 iView
2019独角兽企业重金招聘Python工程师标准>>> 2016年工作中做过最自豪的两件事情: 把 Vue.js 和 Webpack 技术栈引进公司并逐步成为前端规范;开源 iView 项目。初识 Vue 第一次接触 使用 Vue.js 已经有一年半时间了,在接触 Vue 之前…...
2024/4/21 4:04:32 - 基于shiro+jwt的真正rest url权限管理,前后端分离
代码地址如下:http://www.demodashi.com/demo/13277.html bootshiro & usthe bootshiro是基于springbootshirojwt的真正restful URL资源无状态认证权限管理系统的后端usthe是restful URL资源无状态认证权限管理系统的前端,基于angulartypeScriptadminLte区别于…...
2024/4/21 4:04:32 - 使用 JavaScript 包管理工具(npm)
大约从 2010 年开始,几个相互竞争的 JavaScript 包管理工具开始出现,来帮人们从中心仓库中自动完成下载和升级的流程。Bower 在 2013 年可以说是最流行的一个了,但最终在 2015 年左右还是被 npm 打败了。(值得一提的是,…...
2024/4/21 4:04:29 - 送给前端的干货 ,1000篇前端学习资料大合集!(上)
作为前端小白,不知如何入门学习?不善于利用前端工具,导致工作效率低下?每天忙于学习于代码、库、各种工具,却总觉得少了点什么?性能优化,经常无头绪或者没有好的思路?如果你满足其中…...
2024/5/6 4:57:41 - Webpack+Vue 2.0+Element 搭建后台管理页面
技术介绍 1、Element,是一套基于 Vue 2.0 的桌面端组件库,组件基本上满足现在后台管理页面的需求。目前饿了么推出了基于React和Angular的组件库,文档地址:http://element.eleme.io/#/zh-CN/component/,可以完全按照文档的步骤来进…...
2024/4/21 4:04:27 - 初入Angular ,学习记录
目前主流前端框架:React 、Angular 和Vue 。实现SPA(单页刷新) C# : ABP框架 API,Laravel Api ,构建前后台分离项目。 环境配置 1.1 NodeJs和npm 安装 node –v 和 npm –v 查看安装版本可以安装辅助…...
2024/4/21 4:04:26 - angular复习笔记3-组件
组件Component 组件是构成angular应用的核心,angular的有序运行依赖于组件的协同工作,组件之于angular应用就像是汽车和汽车零部件的意思。 概述 近几年的前端发展迅速,各种工程化的工具层出不穷:Browserify,Grunt&…...
2024/4/21 4:04:25 - 《前端之路》之 webpack 4.0+ 的应用构建
目录 一、版本二、webpack 的主体概念2-1、入口2-1-1、单页面入口2-1-2、多页面应用的入口2-2、输出2-3、loader2-4、plugins三、如何使用3-1 关于 resolve 解析的相关的疑问4-1 优化(optimization)5-1 插件(plugins)6-1 开发中 server (devServer)四、总结 一、版本 当前 web…...
2024/4/21 4:04:25 - 利用Angular实现多团队模块化SPA开发框架
0、前言 当一个公司有多个开发团队时,我们可能会遇到这样一些问题: 技术选项杂乱,大家各玩各业务重复度高,各种通用api,登录注销,权限管理都需要重复实现(甚至一个团队都需要重复实现࿰…...
2024/4/23 6:45:09 - 基础分类算法小结(一)
学习了一些基础分类算法的Python实现,对比之前只看书的方法,这一次看程序帮助理解更深,防止忘记,屡一下思路。 1.朴素贝叶斯(Naivebayes)(1)原理:对于给出的待分类项,求解在此项出现的条件下各个类别出现的概率,哪个最大,就认为此待分类项属于哪个类别。 1.朴素的…...
2024/4/20 19:55:39 - angular——生命周期函数和Rxjs基础
一.生命周期函数 1.定义 生命周期函数是在angular组件创建、更新、销毁的时候会触发的一系列方法 2.常用的生命周期函数 按调用顺序如下 constructor 构造函数,除了使用简单的值对局部变量进行初始化之外,什么都不应该做,比如初始化服务对象…...
2024/4/20 19:55:38 - Angular 响应式表单
Kubernetes 对象实战简介 Kubernetes 集群的使用者日常工作中经常需要与 Deployment 等 Kubernetes 对象接触。熟悉 Kubernetes 的朋友都会知道,Kubernetes 的对象结构虽然重视可移植性,不同的对象有着相似的设计理念,但就算是最熟练的系统运…...
2024/5/2 8:07:10 - Angular之解读过滤器
过滤器(filter)正如其名,作用就是接收一个输入,通过某个规则进行处理,然后返回处理后的结果。主要用在数据的格式化上,例如获取一个数组中的子集,对数组中的元素进行排序等。ng内置了一些过滤器…...
2024/4/21 4:04:24 - 解密 Angular WebWorker Renderer (一)
解密 Angular WebWorker Renderer (一) 先来做个对比 开发框架版本:Angular 4.x 项目地址:Charway/angular-webworker-renderer-demo 运行结果:传统的UI线程渲染效果(上图),使用WebWorker线程渲染ÿ…...
2024/4/24 13:49:05
最新文章
- Vue 插槽
Vue插槽是一种特殊的语法,用于在组件中定义可复用的模板部分。它允许开发者在组件的标记中声明一个或多个插槽,然后在使用该组件时,可以根据自己的需求将内容插入到这些插槽中。 Vue插槽分为默认插槽和具名插槽两种。 默认插槽 语法 组件…...
2024/5/7 8:30:19 - 梯度消失和梯度爆炸的一些处理方法
在这里是记录一下梯度消失或梯度爆炸的一些处理技巧。全当学习总结了如有错误还请留言,在此感激不尽。 权重和梯度的更新公式如下: w w − η ⋅ ∇ w w w - \eta \cdot \nabla w ww−η⋅∇w 个人通俗的理解梯度消失就是网络模型在反向求导的时候出…...
2024/5/6 9:38:23 - 【嵌入式开发 Linux 常用命令系列 4.3 -- git add 不 add untracked file】
请阅读【嵌入式开发学习必备专栏 】 文章目录 git add 不add untracked file git add 不add untracked file 如果你想要Git在执行git add .时不添加未跟踪的文件(untracked files),你可以使用以下命令: git add -u这个命令只会加…...
2024/5/5 8:53:25 - datalist是什么,有什么作用?
<datalist>标签用于定义一个预定义选项列表,它可以与文本输入框(<input type"text">)一起使用,提供一组可选的值供用户选择或输入。<datalist>标签中的选项可以通过<option>标签来定义。 <…...
2024/5/1 17:07:43 - 【外汇早评】美通胀数据走低,美元调整
原标题:【外汇早评】美通胀数据走低,美元调整昨日美国方面公布了新一期的核心PCE物价指数数据,同比增长1.6%,低于前值和预期值的1.7%,距离美联储的通胀目标2%继续走低,通胀压力较低,且此前美国一季度GDP初值中的消费部分下滑明显,因此市场对美联储后续更可能降息的政策…...
2024/5/7 5:50:09 - 【原油贵金属周评】原油多头拥挤,价格调整
原标题:【原油贵金属周评】原油多头拥挤,价格调整本周国际劳动节,我们喜迎四天假期,但是整个金融市场确实流动性充沛,大事频发,各个商品波动剧烈。美国方面,在本周四凌晨公布5月份的利率决议和新闻发布会,维持联邦基金利率在2.25%-2.50%不变,符合市场预期。同时美联储…...
2024/5/4 23:54:56 - 【外汇周评】靓丽非农不及疲软通胀影响
原标题:【外汇周评】靓丽非农不及疲软通胀影响在刚结束的周五,美国方面公布了新一期的非农就业数据,大幅好于前值和预期,新增就业重新回到20万以上。具体数据: 美国4月非农就业人口变动 26.3万人,预期 19万人,前值 19.6万人。 美国4月失业率 3.6%,预期 3.8%,前值 3…...
2024/5/4 23:54:56 - 【原油贵金属早评】库存继续增加,油价收跌
原标题:【原油贵金属早评】库存继续增加,油价收跌周三清晨公布美国当周API原油库存数据,上周原油库存增加281万桶至4.692亿桶,增幅超过预期的74.4万桶。且有消息人士称,沙特阿美据悉将于6月向亚洲炼油厂额外出售更多原油,印度炼油商预计将每日获得至多20万桶的额外原油供…...
2024/5/6 9:21:00 - 【外汇早评】日本央行会议纪要不改日元强势
原标题:【外汇早评】日本央行会议纪要不改日元强势近两日日元大幅走强与近期市场风险情绪上升,避险资金回流日元有关,也与前一段时间的美日贸易谈判给日本缓冲期,日本方面对汇率问题也避免继续贬值有关。虽然今日早间日本央行公布的利率会议纪要仍然是支持宽松政策,但这符…...
2024/5/4 23:54:56 - 【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响
原标题:【原油贵金属早评】欧佩克稳定市场,填补伊朗问题的影响近日伊朗局势升温,导致市场担忧影响原油供给,油价试图反弹。此时OPEC表态稳定市场。据消息人士透露,沙特6月石油出口料将低于700万桶/日,沙特已经收到石油消费国提出的6月份扩大出口的“适度要求”,沙特将满…...
2024/5/4 23:55:05 - 【外汇早评】美欲与伊朗重谈协议
原标题:【外汇早评】美欲与伊朗重谈协议美国对伊朗的制裁遭到伊朗的抗议,昨日伊朗方面提出将部分退出伊核协议。而此行为又遭到欧洲方面对伊朗的谴责和警告,伊朗外长昨日回应称,欧洲国家履行它们的义务,伊核协议就能保证存续。据传闻伊朗的导弹已经对准了以色列和美国的航…...
2024/5/4 23:54:56 - 【原油贵金属早评】波动率飙升,市场情绪动荡
原标题:【原油贵金属早评】波动率飙升,市场情绪动荡因中美贸易谈判不安情绪影响,金融市场各资产品种出现明显的波动。随着美国与中方开启第十一轮谈判之际,美国按照既定计划向中国2000亿商品征收25%的关税,市场情绪有所平复,已经开始接受这一事实。虽然波动率-恐慌指数VI…...
2024/5/4 23:55:16 - 【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试
原标题:【原油贵金属周评】伊朗局势升温,黄金多头跃跃欲试美国和伊朗的局势继续升温,市场风险情绪上升,避险黄金有向上突破阻力的迹象。原油方面稍显平稳,近期美国和OPEC加大供给及市场需求回落的影响,伊朗局势并未推升油价走强。近期中美贸易谈判摩擦再度升级,美国对中…...
2024/5/4 23:54:56 - 【原油贵金属早评】市场情绪继续恶化,黄金上破
原标题:【原油贵金属早评】市场情绪继续恶化,黄金上破周初中国针对于美国加征关税的进行的反制措施引发市场情绪的大幅波动,人民币汇率出现大幅的贬值动能,金融市场受到非常明显的冲击。尤其是波动率起来之后,对于股市的表现尤其不安。隔夜美国股市出现明显的下行走势,这…...
2024/5/6 1:40:42 - 【外汇早评】美伊僵持,风险情绪继续升温
原标题:【外汇早评】美伊僵持,风险情绪继续升温昨日沙特两艘油轮再次发生爆炸事件,导致波斯湾局势进一步恶化,市场担忧美伊可能会出现摩擦生火,避险品种获得支撑,黄金和日元大幅走强。美指受中美贸易问题影响而在低位震荡。继5月12日,四艘商船在阿联酋领海附近的阿曼湾、…...
2024/5/4 23:54:56 - 【原油贵金属早评】贸易冲突导致需求低迷,油价弱势
原标题:【原油贵金属早评】贸易冲突导致需求低迷,油价弱势近日虽然伊朗局势升温,中东地区几起油船被袭击事件影响,但油价并未走高,而是出于调整结构中。由于市场预期局势失控的可能性较低,而中美贸易问题导致的全球经济衰退风险更大,需求会持续低迷,因此油价调整压力较…...
2024/5/4 23:55:17 - 氧生福地 玩美北湖(上)——为时光守候两千年
原标题:氧生福地 玩美北湖(上)——为时光守候两千年一次说走就走的旅行,只有一张高铁票的距离~ 所以,湖南郴州,我来了~ 从广州南站出发,一个半小时就到达郴州西站了。在动车上,同时改票的南风兄和我居然被分到了一个车厢,所以一路非常愉快地聊了过来。 挺好,最起…...
2024/5/4 23:55:06 - 氧生福地 玩美北湖(中)——永春梯田里的美与鲜
原标题:氧生福地 玩美北湖(中)——永春梯田里的美与鲜一觉醒来,因为大家太爱“美”照,在柳毅山庄去寻找龙女而错过了早餐时间。近十点,向导坏坏还是带着饥肠辘辘的我们去吃郴州最富有盛名的“鱼头粉”。说这是“十二分推荐”,到郴州必吃的美食之一。 哇塞!那个味美香甜…...
2024/5/4 23:54:56 - 氧生福地 玩美北湖(下)——奔跑吧骚年!
原标题:氧生福地 玩美北湖(下)——奔跑吧骚年!让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 让我们红尘做伴 活得潇潇洒洒 策马奔腾共享人世繁华 对酒当歌唱出心中喜悦 轰轰烈烈把握青春年华 啊……啊……啊 两…...
2024/5/4 23:55:06 - 扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!
原标题:扒开伪装医用面膜,翻六倍价格宰客,小姐姐注意了!扒开伪装医用面膜,翻六倍价格宰客!当行业里的某一品项火爆了,就会有很多商家蹭热度,装逼忽悠,最近火爆朋友圈的医用面膜,被沾上了污点,到底怎么回事呢? “比普通面膜安全、效果好!痘痘、痘印、敏感肌都能用…...
2024/5/5 8:13:33 - 「发现」铁皮石斛仙草之神奇功效用于医用面膜
原标题:「发现」铁皮石斛仙草之神奇功效用于医用面膜丽彦妆铁皮石斛医用面膜|石斛多糖无菌修护补水贴19大优势: 1、铁皮石斛:自唐宋以来,一直被列为皇室贡品,铁皮石斛生于海拔1600米的悬崖峭壁之上,繁殖力差,产量极低,所以古代仅供皇室、贵族享用 2、铁皮石斛自古民间…...
2024/5/4 23:55:16 - 丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者
原标题:丽彦妆\医用面膜\冷敷贴轻奢医学护肤引导者【公司简介】 广州华彬企业隶属香港华彬集团有限公司,专注美业21年,其旗下品牌: 「圣茵美」私密荷尔蒙抗衰,产后修复 「圣仪轩」私密荷尔蒙抗衰,产后修复 「花茵莳」私密荷尔蒙抗衰,产后修复 「丽彦妆」专注医学护…...
2024/5/4 23:54:58 - 广州械字号面膜生产厂家OEM/ODM4项须知!
原标题:广州械字号面膜生产厂家OEM/ODM4项须知!广州械字号面膜生产厂家OEM/ODM流程及注意事项解读: 械字号医用面膜,其实在我国并没有严格的定义,通常我们说的医美面膜指的应该是一种「医用敷料」,也就是说,医用面膜其实算作「医疗器械」的一种,又称「医用冷敷贴」。 …...
2024/5/6 21:42:42 - 械字号医用眼膜缓解用眼过度到底有无作用?
原标题:械字号医用眼膜缓解用眼过度到底有无作用?医用眼膜/械字号眼膜/医用冷敷眼贴 凝胶层为亲水高分子材料,含70%以上的水分。体表皮肤温度传导到本产品的凝胶层,热量被凝胶内水分子吸收,通过水分的蒸发带走大量的热量,可迅速地降低体表皮肤局部温度,减轻局部皮肤的灼…...
2024/5/4 23:54:56 - 配置失败还原请勿关闭计算机,电脑开机屏幕上面显示,配置失败还原更改 请勿关闭计算机 开不了机 这个问题怎么办...
解析如下:1、长按电脑电源键直至关机,然后再按一次电源健重启电脑,按F8健进入安全模式2、安全模式下进入Windows系统桌面后,按住“winR”打开运行窗口,输入“services.msc”打开服务设置3、在服务界面,选中…...
2022/11/19 21:17:18 - 错误使用 reshape要执行 RESHAPE,请勿更改元素数目。
%读入6幅图像(每一幅图像的大小是564*564) f1 imread(WashingtonDC_Band1_564.tif); subplot(3,2,1),imshow(f1); f2 imread(WashingtonDC_Band2_564.tif); subplot(3,2,2),imshow(f2); f3 imread(WashingtonDC_Band3_564.tif); subplot(3,2,3),imsho…...
2022/11/19 21:17:16 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机...
win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”问题的解决方法在win7系统关机时如果有升级系统的或者其他需要会直接进入一个 等待界面,在等待界面中我们需要等待操作结束才能关机,虽然这比较麻烦,但是对系统进行配置和升级…...
2022/11/19 21:17:15 - 台式电脑显示配置100%请勿关闭计算机,“准备配置windows 请勿关闭计算机”的解决方法...
有不少用户在重装Win7系统或更新系统后会遇到“准备配置windows,请勿关闭计算机”的提示,要过很久才能进入系统,有的用户甚至几个小时也无法进入,下面就教大家这个问题的解决方法。第一种方法:我们首先在左下角的“开始…...
2022/11/19 21:17:14 - win7 正在配置 请勿关闭计算机,怎么办Win7开机显示正在配置Windows Update请勿关机...
置信有很多用户都跟小编一样遇到过这样的问题,电脑时发现开机屏幕显现“正在配置Windows Update,请勿关机”(如下图所示),而且还需求等大约5分钟才干进入系统。这是怎样回事呢?一切都是正常操作的,为什么开时机呈现“正…...
2022/11/19 21:17:13 - 准备配置windows 请勿关闭计算机 蓝屏,Win7开机总是出现提示“配置Windows请勿关机”...
Win7系统开机启动时总是出现“配置Windows请勿关机”的提示,没过几秒后电脑自动重启,每次开机都这样无法进入系统,此时碰到这种现象的用户就可以使用以下5种方法解决问题。方法一:开机按下F8,在出现的Windows高级启动选…...
2022/11/19 21:17:12 - 准备windows请勿关闭计算机要多久,windows10系统提示正在准备windows请勿关闭计算机怎么办...
有不少windows10系统用户反映说碰到这样一个情况,就是电脑提示正在准备windows请勿关闭计算机,碰到这样的问题该怎么解决呢,现在小编就给大家分享一下windows10系统提示正在准备windows请勿关闭计算机的具体第一种方法:1、2、依次…...
2022/11/19 21:17:11 - 配置 已完成 请勿关闭计算机,win7系统关机提示“配置Windows Update已完成30%请勿关闭计算机”的解决方法...
今天和大家分享一下win7系统重装了Win7旗舰版系统后,每次关机的时候桌面上都会显示一个“配置Windows Update的界面,提示请勿关闭计算机”,每次停留好几分钟才能正常关机,导致什么情况引起的呢?出现配置Windows Update…...
2022/11/19 21:17:10 - 电脑桌面一直是清理请关闭计算机,windows7一直卡在清理 请勿关闭计算机-win7清理请勿关机,win7配置更新35%不动...
只能是等着,别无他法。说是卡着如果你看硬盘灯应该在读写。如果从 Win 10 无法正常回滚,只能是考虑备份数据后重装系统了。解决来方案一:管理员运行cmd:net stop WuAuServcd %windir%ren SoftwareDistribution SDoldnet start WuA…...
2022/11/19 21:17:09 - 计算机配置更新不起,电脑提示“配置Windows Update请勿关闭计算机”怎么办?
原标题:电脑提示“配置Windows Update请勿关闭计算机”怎么办?win7系统中在开机与关闭的时候总是显示“配置windows update请勿关闭计算机”相信有不少朋友都曾遇到过一次两次还能忍但经常遇到就叫人感到心烦了遇到这种问题怎么办呢?一般的方…...
2022/11/19 21:17:08 - 计算机正在配置无法关机,关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机...
关机提示 windows7 正在配置windows 请勿关闭计算机 ,然后等了一晚上也没有关掉。现在电脑无法正常关机以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!关机提示 windows7 正在配…...
2022/11/19 21:17:05 - 钉钉提示请勿通过开发者调试模式_钉钉请勿通过开发者调试模式是真的吗好不好用...
钉钉请勿通过开发者调试模式是真的吗好不好用 更新时间:2020-04-20 22:24:19 浏览次数:729次 区域: 南阳 > 卧龙 列举网提醒您:为保障您的权益,请不要提前支付任何费用! 虚拟位置外设器!!轨迹模拟&虚拟位置外设神器 专业用于:钉钉,外勤365,红圈通,企业微信和…...
2022/11/19 21:17:05 - 配置失败还原请勿关闭计算机怎么办,win7系统出现“配置windows update失败 还原更改 请勿关闭计算机”,长时间没反应,无法进入系统的解决方案...
前几天班里有位学生电脑(windows 7系统)出问题了,具体表现是开机时一直停留在“配置windows update失败 还原更改 请勿关闭计算机”这个界面,长时间没反应,无法进入系统。这个问题原来帮其他同学也解决过,网上搜了不少资料&#x…...
2022/11/19 21:17:04 - 一个电脑无法关闭计算机你应该怎么办,电脑显示“清理请勿关闭计算机”怎么办?...
本文为你提供了3个有效解决电脑显示“清理请勿关闭计算机”问题的方法,并在最后教给你1种保护系统安全的好方法,一起来看看!电脑出现“清理请勿关闭计算机”在Windows 7(SP1)和Windows Server 2008 R2 SP1中,添加了1个新功能在“磁…...
2022/11/19 21:17:03 - 请勿关闭计算机还原更改要多久,电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机怎么办...
许多用户在长期不使用电脑的时候,开启电脑发现电脑显示:配置windows更新失败,正在还原更改,请勿关闭计算机。。.这要怎么办呢?下面小编就带着大家一起看看吧!如果能够正常进入系统,建议您暂时移…...
2022/11/19 21:17:02 - 还原更改请勿关闭计算机 要多久,配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以...
配置windows update失败 还原更改 请勿关闭计算机,电脑开机后一直显示以以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!配置windows update失败 还原更改 请勿关闭计算机&#x…...
2022/11/19 21:17:01 - 电脑配置中请勿关闭计算机怎么办,准备配置windows请勿关闭计算机一直显示怎么办【图解】...
不知道大家有没有遇到过这样的一个问题,就是我们的win7系统在关机的时候,总是喜欢显示“准备配置windows,请勿关机”这样的一个页面,没有什么大碍,但是如果一直等着的话就要两个小时甚至更久都关不了机,非常…...
2022/11/19 21:17:00 - 正在准备配置请勿关闭计算机,正在准备配置windows请勿关闭计算机时间长了解决教程...
当电脑出现正在准备配置windows请勿关闭计算机时,一般是您正对windows进行升级,但是这个要是长时间没有反应,我们不能再傻等下去了。可能是电脑出了别的问题了,来看看教程的说法。正在准备配置windows请勿关闭计算机时间长了方法一…...
2022/11/19 21:16:59 - 配置失败还原请勿关闭计算机,配置Windows Update失败,还原更改请勿关闭计算机...
我们使用电脑的过程中有时会遇到这种情况,当我们打开电脑之后,发现一直停留在一个界面:“配置Windows Update失败,还原更改请勿关闭计算机”,等了许久还是无法进入系统。如果我们遇到此类问题应该如何解决呢࿰…...
2022/11/19 21:16:58 - 如何在iPhone上关闭“请勿打扰”
Apple’s “Do Not Disturb While Driving” is a potentially lifesaving iPhone feature, but it doesn’t always turn on automatically at the appropriate time. For example, you might be a passenger in a moving car, but your iPhone may think you’re the one dri…...
2022/11/19 21:16:57