做网站要用框架吗,抖音seo关键词排名技术,网站title 在哪里设置,wordpress 投票1.nuxt服务端渲染技术SSR Server Side Render(ajax异步请求,SEO是靠爬虫抓取数据的,没有抓到数据排名靠后) 1.在用户端搭建(利于SEO) 1.解压后 npm install npm run dev 2.default.vue有 头内容和尾,创建头尾文件,然后加入到组件 3.每个前端系统对应一个单独的后台接口(太方便了…1.nuxt服务端渲染技术SSR Server Side Render(ajax异步请求,SEO是靠爬虫抓取数据的,没有抓到数据排名靠后) 1.在用户端搭建(利于SEO) 1.解压后 npm install npm run dev 2.default.vue有 头内容和尾,创建头尾文件,然后加入到组件 3.每个前端系统对应一个单独的后台接口(太方便了,你终于不用写route文件,写繁杂的路由信息了) 2.nuxt路由(固定路由和动态路由[添加变化的数据]) window.location.href/hosp;//会跳转到 /hosp/index.vue文件//在host文件夹下创建,动态路由文件夹规范 _开头 如 _hoscode.vue//会自动找到变量名对应的名字window.location.href/hosphoscode;3.登录(手机号登录验证码/微信登录) 1.网关判断登录状态(后面直接提取到User模块通过GlobalFilter判断全局状态,就不必每次请求都需要登录信息)2.加网关路径3.判断第一次登录4.jwt工具生成(token放请求头,方便前端判断) 头信息(加密算法)用户信息(自己传入)签名信息(秘钥) 然后base64加密 放非隐私信息 //token过期时间和秘钥1.过程: 登录时生成token,然后与redis存的token对比//下面的工具类可以根据需要得到对应的值
public class JwtHelper {//过期时间24小时内过期private static long tokenExpiration 24*60*60*1000;//签名秘钥private static String tokenSignKey 123456;//根据参数生成tokenpublic static String createToken(Long userId, String userName) {String token Jwts.builder().setSubject(USER).setExpiration(new Date(System.currentTimeMillis() tokenExpiration))//设置过期.claim(userId, userId).claim(userName, userName).signWith(SignatureAlgorithm.HS512, tokenSignKey)//加密算法.compressWith(CompressionCodecs.GZIP) //压缩.compact();return token;}//根据token字符串得到用户idpublic static Long getUserId(String token) {if(StringUtils.isEmpty(token)) return null;JwsClaims claimsJws Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);Claims claims claimsJws.getBody();Integer userId (Integer)claims.get(userId);return userId.longValue();}//根据token字符串得到用户名称public static String getUserName(String token) {if(StringUtils.isEmpty(token)) return ;JwsClaims claimsJws Jwts.parser().setSigningKey(tokenSignKey).parseClaimsJws(token);Claims claims claimsJws.getBody();return (String)claims.get(userName);}public static void main(String[] args) {String token JwtHelper.createToken(1L, lucy);System.out.println(token);System.out.println(JwtHelper.getUserId(token));System.out.println(JwtHelper.getUserName(token));}
}5.手机登录 阿里云短信访问申请签名,模板得到accesskey(点头像)引入依赖 dependencygroupIdcom.aliyun.oss/groupIdartifactIdaliyun-sdk-oss/artifactId
/dependency创建短信发送模块,需要在启动类exclude datasource,因为不使用数据库连接写工具类,读取sms的配置信息创建bean对象redisTemplate.opsForValue.get(phone)//得到手机号对应的验证码map .set(phone,code,TimeUnit.MINUTES)前端(放cookie)直接调用sms模块,往redis存,登录模块判断redis 6.前端vue需要npm装js-cookie才能使用cookie,点击可以直接改值 //!!!head.Vue引入Vue,可以调用全局登录事件,其他页面可以调用
7.用户认证放到网关 在gateway创建类实现GlobalFilter,Ordered
8.OAuth2解决开放系统间授权问题和单点登录(登录一个模块,其他模块不用登录)(就是CA[第三方公司]给我发token,我可以登录其他公司的账户操作) 为什么? 用户密码复制(用户密码给我去访问其他系统)不安全通用开发者key,开发者和合作者共同开放一个同一的key去访问(我的公司去和百度合作)通常不合适颁发令牌(百度颁发令牌给我,临时可以使用,需要token) 9.微信扫码登录(理清思路) 前端生成二维码,在页面调用微信地址加上配置信息(从服务器获得)前端扫码二维码,设置回调地址,微信会返回页面(因为无法调用到本地页面,controller写相同的本地回调页面地址可以解决)微信返回code给后端,加上秘钥去请求得到临时token,用httpclient(模拟浏览器请求,需要引入依赖)请求微信数据 使用StringBuffer.append(?aa%s);//占位符 String.format(sb.toString,name);得到微信用户信息,openid不为空给openid,为空就需要后期绑定手机号