
第一,进入小程序全局先进行获取微信code,用code作为参数请求接口得到用户登录信息,同时判断是否为新用户。
第二,请求接口,发生登录失效(token失效)时,自动登录后,再重新请求。
第三,请求接口,当返回未登录(授权)提示时,做兼容。(比如跳到授权页,这个具体看接口的业务逻辑)
在utiljs中封装一些登录、请求方法。
1调用微信登录,获取微信code
2通过微信code登录,获取用户信息(token,userInfo)
3请求数据,这里只封装请求数据的参数与方法,不处理各种code
4封装request请求方法,这里专门处理返回不同code的情况
各个页面中的接口数据请求,都是调用这个方法。
在appjs的onLaunch方法中,判断token和userInfo是否存在,存在就不是新用户,否则根据微信返回的code,去请求后端接口,查看返回的信息,是否为新用户。
很多时候要防止重复提交 比如论坛在发表提问的时候 要是不控制那就可以一直提交~
使用方法 论坛为例
ask do 为跳到提问页面的action
ask jsp 为提问页面
askok do:为提问成功提交的action
askok jsp 处理提问之后的跳转的jsp
首先在ask这个action里面加入saveToken(request);这是为了在提问页面即ask jsp页面生成一个隐藏 的表单
<input type= hidden name= apacl TOKEN value= a b ff b b d >
在ask jsp页面做以下处理 使用form为<:formmethod= post action= askok do > 因此要引入这个标签 否则不会生成这个隐藏表单
form写法 之后不写name 没有这个属性 但要在struts config xml里面配置这个actionform 我们 可以定义为question 同时要配置askok这个action里面要写入对应的form
<action path= /askok type= name= question >必须写上这个否则会报找不到FORM的 错误
如果要在ask jsp这个页面做js处理要用到FORM name的话可以直接写 question 因为struts自动 生成了这个form的name 生成之后的:<form name= bangquestion method= post action= /askok do >
ask jsp 这个页面自动生成加入FORM name
然后在askok do里面写if (isTokenValid(ac getRequest() true)) {
添加提问
}else
{
跳转提示
lishixinzhi/Article/program/Java/ky/201311/28184需要重新获取code,然后得到access token。 即要重新调用授权界面。需要用refresh token刷新access token。
关于access token过期的解决办法:
是在内层函数中,如果执行失败,并且是access_token过期的异常,则会在request的时候抛出专门的异常。
在外围函数如果接收到了这个异常,则会抛出让装饰器接收到,装饰器收到这个异常后会删掉缓存中的token,并且重新执行该函数,这样该函数在执行的时候,就会去主动的获取最新的token。
assess token过期的原因:
测试服和线上服使用同一个app_id和secret来获取,可能会存在其中一方获取的token是旧的。
代码中没有统一的从一个地方来获取,而是直接从官网获取,导致不统一(看了代码,没有发现单独获取token的地方)。
请求获取新的token的时候失败(应该不可能,因为请求成功以后会在redis中缓存两个小时,但是发现没过多久又再次失效,因此主要原因应该不是这个)。
异步队列等待的时间较长,正好执行的时候token已经更新(应该不可能,获取token是在异步函数中执行,而不是通过函数参数来传递)。
1、JWT的构成
- 头部(header):描述该JWT的最基本的信息,如类型以及签名所用的算法。
- 负载(payload):存放有效信息的地方。
- 签证(signature):base64加密后的header、base64加密后的payload和密钥secret加密后组成。
2、整合JWT
21 引入JWT依赖
comauth0
java-jwt
3183
22 编写JWTUtils工具类
package comstockutils;
import comauth0jwtJWT;
import comauth0jwtJWTCreator;
import comauth0jwtJWTVerifier;
import comauth0jwtalgorithmsAlgorithm;
import comauth0jwtinterfacesDecodedJWT;
import comauth0jwtinterfacesVerification;
import javautilCalendar;
import javautilMap;
public class JWTUtils {
private static final String SING="@#$%^&";
// 生成token
public static String getToken(Map map){
Calendar instance = CalendargetInstance();
instanceadd(CalendarMINUTE,30);
//创建jwt builder
JWTCreatorBuilder builder = JWTcreate();
//payload
builderwithExpiresAt(instancegetTime());
mapforEach((k,v)->{
builderwithClaim(k,v);
});
//设置签名
String token = buildersign(AlgorithmHMAC256(SING));
return token;
}
//验证令牌
public static void verifyToken(String token){
JWTVerifier require = JWTrequire(AlgorithmHMAC256(SING))build();
requireverify(token);
}
//获取token信息
public static DecodedJWT getTokenInfo(String token){
DecodedJWT verify = JWTrequire(AlgorithmHMAC256(SING))build()verify(token);
return verify;
}
}
23 编写拦截器
public class JWTInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(>
以上就是关于小程序 判断是否为新用户 登陆授权 封装request请求全部的内容,包括:小程序 判断是否为新用户 登陆授权 封装request请求、struts中token的使用方法、获取access token失败什么意思等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)