首页
App
&
Coffee
文档
项目
分享
反馈
俱乐部
登录
注册
配置https,登陆成功之后页面跳转,端口值没有了
simplehy
2019-12-30 11:43
按照文档配置来的,扫码登陆成功之后页面跳转到主页,但是不知道为什么端口值没有了,导致无法访问,手动添加端口值之后可以访问成功
项目:
JFinal
1
1
评论区
simplehy
2019-12-30 11:47
http协议下,扫码登陆成功之后页面跳转,是有端口值的,不知道为什么配置了https之后,扫码成功之后页面跳转就少了端口值???
回复
simplehy
2019-12-30 13:43
@JFinal
放开75行注释页面跳转没问题了~
回复
JFinal
2019-12-30 13:54
@simplehy
你用了 nginx 这类反向代理没有?
回复
simplehy
2019-12-30 14:28
@JFinal
没有用
回复
JFinal
2019-12-30 14:29
@simplehy
能不能贴出一点出问题的代码,我需要重现这个问题,找到根本原因
回复
simplehy
2019-12-30 15:08
@JFinal
//web端扫码登陆
public void index() throws ApiException{
DefaultDingTalkClient client=new DefaultDingTalkClient("https://oapi.dingtalk.com/sns/getuserinfo_bycode");
OapiSnsGetuserinfoBycodeRequest req=new OapiSnsGetuserinfoBycodeRequest();
req.setTmpAuthCode(getPara("code"));
OapiSnsGetuserinfoBycodeResponse response=client.execute(req,"dingoa6anbucxldra86g9q","xptFam_8drO-wuNGKKQTkjgdMLxhs0Nyj6j9s0uGEAa-doZVUfDmmqtxlhR0koU5");
String dingtoken=AccessTokenUtil.getToken();
//获取UserId
DingTalkClient client2=new DefaultDingTalkClient("https://oapi.dingtalk.com/user/getUseridByUnionid");
OapiUserGetUseridByUnionidRequest request2=new OapiUserGetUseridByUnionidRequest();
request2.setUnionid(response.getUserInfo().getUnionid());
request2.setHttpMethod("GET");
OapiUserGetUseridByUnionidResponse userInfo=client2.execute(request2,dingtoken);
if(0==userInfo.getErrcode()) {
//获取用户详情
DingTalkClient client3=new DefaultDingTalkClient("https://oapi.dingtalk.com/user/get");
OapiUserGetRequest request=new OapiUserGetRequest();
request.setUserid(userInfo.getUserid());
request.setHttpMethod("GET");
OapiUserGetResponse response3=client3.execute(request,dingtoken);
UsernamePasswordToken token=new UsernamePasswordToken(userInfo.getUserid(),userInfo.getUserid());
Subject subject=SecurityUtils.getSubject();
subject.login(token);
subject.getSession().setAttribute("user", response3);
//redirect("/index");
render(new RedirectRender("/index"));
}else {
//redirect("/loginInit?code=1&icon=5");
render(new RedirectRender("/loginInit?code=1&icon=5"));
}
}
之前用的是redirect("/index");后面根据你的提示换成了render(new RedirectRender("/index"));然后就好了~
回复
JFinal
2020-05-27 15:42
@simplehy
这里给出最完美的解决方案,可以在这里直接下载代码用在项目中:
http://free-download.jfinal.com/download/MyRenderFactory.zip
回复
JFinal
2020-05-27 17:43
稍微描述一下 nginx 代理实现 "https" 时, redirect(…) 会错误重定向到 "http" 的原因:
1: nginx 代理实现 https
2: 浏览器与 nginx 用的是 https 通道
3: 但 nginx 与 jfinal 项目之间用的是 http 通道
4: 在 jfinal 的 RedirectRender.java 中通过 request.getSheme() 得到的协议值必然是 "http"。通过 request.getServerPort() 得到的必然是 nginx 与 jfinal 之间用的 port
从而,站在 jfinal 的角度得到的协议值 "http" 与 port 值都是错误的,所以需要在 nginx 上通过配置传入额外的参数来解决,这两个参数就是:
X-Forwarded-Proto、X-Forwarded-Port
配置方法如下:
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Forwarded-Port $server_port;
回复
JFinal
2020-05-27 17:45
在 nginx 中添加配置传入 X-Forwarded-Proto、X-Forwarded-Port 两个变量以后,再下载下面的扩展代码用于自己的项目,可完美解决该问题:
http://free-download.jfinal.com/download/MyRenderFactory.zip
以上这个解决方案会做到 jfinal 5.0 中去,目前只能先下载我提供的代码解决
回复
发送
我要反馈
热门反馈
扫码入社