package com.liuguanlin.travel.controll;
 
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.jfinal.log.Log;
import com.liuguanlin.common.core.base.BaseController;
import com.liuguanlin.common.util.ValueUtil;
import com.liuguanlin.travel.service.UserTb;
import com.qq.connect.QQConnectException;
import com.qq.connect.api.OpenID;
import com.qq.connect.api.qzone.UserInfo;
import com.qq.connect.javabeans.AccessToken;
import com.qq.connect.javabeans.qzone.UserInfoBean;
import com.qq.connect.oauth.Oauth;
 
public class AccountController extends BaseController {
 
    private static final Log _log = Log.getLog(AccountController.class);
 
    // 跳转qq登录
    public void qc_login() {
        // 获取session对象
        UserTb userTb = getSessionAttr("user");
         
        //已经登录直接重定向到首页
        if (ValueUtil.isNotEmpty(userTb)) {
            redirect("/");
            return;
        }
         
        // 获取requese对象
        HttpServletRequest request = getRequest();
        // 获取response对象
        HttpServletResponse response = getResponse();
        response.setContentType("text/html;charset=utf-8");
        try {
            response.sendRedirect(new Oauth().getAuthorizeURL(request));
            renderNull();
        } catch (QQConnectException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    // 回调地址
    public void qc_callback() throws Exception {
        try {
            // 获取requese对象
            HttpServletRequest request = getRequest();
 
            // 获取token对象
            AccessToken accessTokenObj = (new Oauth()).getAccessTokenByRequest(request);
 
            // 变量token|openid|tokenExpireIn
            String accessToken = null;
            String openID = null;
            long tokenExpireIn = 0L;
 
            if (ValueUtil.isNotEmpty(accessTokenObj.getAccessToken())) {
                // 获取token
                accessToken = accessTokenObj.getAccessToken();
                tokenExpireIn = accessTokenObj.getExpireIn();
 
                /*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-I'm a gorgeous dividing line-*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*/
 
                // 利用获取到的accessToken 去获取当前用的openid
                OpenID openIDObj = new OpenID(accessToken);
                openID = openIDObj.getUserOpenID();
                _log.info("欢迎你,代号为 " + openID + " 的用户! tokenExpireIn=" + tokenExpireIn);
 
                /*--*--*--*--*--*--*--*--*--*--*--*--*--*--*-I'm a gorgeous dividing line-*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*--*/
 
                // 利用获取到的accessToken,openid 去获取用户在Qzone的昵称等信息
                UserInfo userInfo = new UserInfo(accessToken, openID);
                UserInfoBean userInfoBean = userInfo.getUserInfo();
 
                // 判断是否获取到了正确的用户信息
                if (userInfoBean.getRet() == 0) {
                    // 操作入库
                    _log.info(toJsonStr(userInfo));
 
                    // 判断是否第一次登录,执行更新或新增用户
                    UserTb userTb = UserTb.add_user(userInfoBean, openID, accessToken);
 
                    // 登录成功回调
                    login_suc_callbcak(userTb);
 
                } else {
                    _log.error("很抱歉,我们没能正确获取到您的信息,原因是: " + userInfoBean.getMsg());
                }
 
            } else {
                // 我们的网站被CSRF攻击了或者用户取消了授权 做一些数据统计工作
                _log.error("没有获取到响应参数");
            }
 
            // 重定向首页
            redirect("/");
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
 
    // 登录成功回调地址,操作session
    public void login_suc_callbcak(UserTb userTb) {
        if (ValueUtil.isNotEmpty(userTb)) {
            setSessionAttr("user", userTb);
        }
    }
 
    // 注销
    public void signout() {
        UserTb userTb = getSessionAttr("user");
        if (ValueUtil.isNotEmpty(userTb)) {
            removeSessionAttr("user");
        }
        redirect("/");
    }
 
}
JFinal action report -------- 2017-06-06 13:13:24 ------------------------------ Url : GET /qq/qc_callback Controller : com.liuguanlin.travel.controll.AccountController.(AccountController.java:1) Method : qc_callback Interceptor : com.jfinal.ext.interceptor.SessionInViewInterceptor.(SessionInViewInterceptor.java:1) com.liuguanlin.travel.jfinal.interceptors.ExceptionInterceptor.(ExceptionInterceptor.java:1) Parameter : code=E5639F04A2A774643DF06050C70F7DEE state=5eb8a7cafcd54a1de692c2e35c42b0d1 -------------------------------------------------------------------------------- 2017-06-06 13:13:24[INFO]-[Thread: http-nio-80-exec-52]-[org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry()]: I/O exception (javax.net.ssl.SSLException) caught when processing request: java.security.ProviderException: java.security.KeyException 2017-06-06 13:13:24[INFO]-[Thread: http-nio-80-exec-52]-[org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry()]: Retrying request 2017-06-06 13:13:24[INFO]-[Thread: http-nio-80-exec-52]-[org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry()]: I/O exception (javax.net.ssl.SSLException) caught when processing request: java.security.ProviderException: java.security.KeyException 2017-06-06 13:13:24[INFO]-[Thread: http-nio-80-exec-52]-[org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry()]: Retrying request 2017-06-06 13:13:25[INFO]-[Thread: http-nio-80-exec-52]-[org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry()]: I/O exception (javax.net.ssl.SSLException) caught when processing request: java.security.ProviderException: java.security.KeyException 2017-06-06 13:13:25[INFO]-[Thread: http-nio-80-exec-52]-[org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry()]: Retrying request com.qq.connect.QQConnectException: java.security.ProviderException: java.security.KeyException at com.qq.connect.utils.http.HttpClient.httpRequest(HttpClient.java:364) at com.qq.connect.utils.http.HttpClient.post(HttpClient.java:237) at com.qq.connect.oauth.Oauth.getAccessTokenByRequest(Oauth.java:84) at com.liuguanlin.travel.controll.AccountController.qc_callback(AccountController.java:62) at sun.reflect.GeneratedMethodAccessor38.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:606) at com.jfinal.aop.Invocation.invoke(Invocation.java:73) at com.liuguanlin.travel.jfinal.interceptors.ExceptionInterceptor.intercept(ExceptionInterceptor.java:25) at com.jfinal.aop.Invocation.invoke(Invocation.java:67) at com.jfinal.ext.interceptor.SessionInViewInterceptor.intercept(SessionInViewInterceptor.java:44) at com.jfinal.aop.Invocation.invoke(Invocation.java:67) at com.jfinal.core.ActionHandler.handle(ActionHandler.java:78) at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:74) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1757) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1716) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: javax.net.ssl.SSLException: java.security.ProviderException: java.security.KeyException at sun.security.ssl.Alerts.getSSLException(Alerts.java:208) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1916) at sun.security.ssl.SSLSocketImpl.fatal(SSLSocketImpl.java:1874) at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1857) at sun.security.ssl.SSLSocketImpl.handleException(SSLSocketImpl.java:1783) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:127) at java.io.BufferedOutputStream.flushBuffer(BufferedOutputStream.java:82) at java.io.BufferedOutputStream.flush(BufferedOutputStream.java:140) at org.apache.commons.httpclient.methods.EntityEnclosingMethod.writeRequestBody(EntityEnclosingMethod.java:506) at org.apache.commons.httpclient.HttpMethodBase.writeRequest(HttpMethodBase.java:2114) at org.apache.commons.httpclient.HttpMethodBase.execute(HttpMethodBase.java:1096) at org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:398) at org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:171) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:397) at org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:323) at com.qq.connect.utils.http.HttpClient.httpRequest(HttpClient.java:337) ... 31 more Caused by: java.security.ProviderException: java.security.KeyException at sun.security.ec.ECKeyPairGenerator.generateKeyPair(ECKeyPairGenerator.java:146) at java.security.KeyPairGenerator$Delegate.generateKeyPair(KeyPairGenerator.java:704) at sun.security.ssl.ECDHCrypt.<init>(ECDHCrypt.java:78) at sun.security.ssl.ClientHandshaker.serverKeyExchange(ClientHandshaker.java:717) at sun.security.ssl.ClientHandshaker.processMessage(ClientHandshaker.java:278) at sun.security.ssl.Handshaker.processLoop(Handshaker.java:913) at sun.security.ssl.Handshaker.process_record(Handshaker.java:849) at sun.security.ssl.SSLSocketImpl.readRecord(SSLSocketImpl.java:1035) at sun.security.ssl.SSLSocketImpl.performInitialHandshake(SSLSocketImpl.java:1344) at sun.security.ssl.SSLSocketImpl.writeRecord(SSLSocketImpl.java:721) at sun.security.ssl.AppOutputStream.write(AppOutputStream.java:122) ... 41 more Caused by: java.security.KeyException at sun.security.ec.ECKeyPairGenerator.generateECKeyPair(Native Method) at sun.security.ec.ECKeyPairGenerator.generateKeyPair(ECKeyPairGenerator.java:126) ... 51 more 2017-06-06 13:13:25[ERROR]-[Thread: http-nio-80-exec-52]-[com.jfinal.core.ActionHandler.handle()]: /qq/qc_callback?code=E5639F04A2A774643DF06050C70F7DEE&state=5eb8a7cafcd54a1de692c2e35c42b0d1 com.jfinal.render.RenderException: java.lang.RuntimeException: File not found : /var/tomcat/tomcat-7/webapps/travel-master/html/qc_callback.html at com.jfinal.render.TemplateRender.render(TemplateRender.java:63) at com.jfinal.core.ActionHandler.handle(ActionHandler.java:99) at com.jfinal.core.JFinalFilter.doFilter(JFinalFilter.java:74) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208) at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220) at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122) at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:505) at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170) at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103) at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:956) at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116) at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:423) at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1079) at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:625) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1757) at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1716) at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) at java.lang.Thread.run(Thread.java:745) Caused by: java.lang.RuntimeException: File not found : /var/tomcat/tomcat-7/webapps/travel-master/html/qc_callback.html at com.jfinal.template.FileStringSource.getContent(FileStringSource.java:70) at com.jfinal.template.Engine.buildTemplateByFileStringSource(Engine.java:147) at com.jfinal.template.Engine.getTemplate(Engine.java:133) at com.jfinal.render.TemplateRender.render(TemplateRender.java:61) ... 20 more
本地回调是没有问题的,发布正式ip就有这个问题,其他一切正常,为什么?
 项目:JFinal