java后台的跨域问题

//网站A跨域访问网站B的某个方法并返回

    //这是网站A的后台
    protected void processRequest(HttpServletRequest request, HttpServletResponse response) throwsIOException {
        String json_string = "{'mes':null,'error':false}";

        response.setCharacterEncoding("utf-8");
        response.setHeader("Access-Control-Allow-Origin", "*");
        try {
            String basePath = request.getParameter("basePath");
            String username = request.getParameter("username");
            String password = request.getParameter("password");

            json_string=login_(basePath,username,password);
        }catch (Exception e){

        }
        response.getWriter().print(json_string);
        return ;
    }

    public String login_(String basePath,String userName,String password)throws Exception{
        URL realUrl = new URL(basePath);

        HttpURLConnection conn = (HttpURLConnection) realUrl.openConnection();
        conn.setRequestMethod("POST"); // 设置请求方式
        conn.setDoOutput(true);// 是否输入参数
        StringBuffer params = new StringBuffer();
        // 表单参数与get形式一样
        params.append("username").append("=")
                .append(URLEncoder.encode(userName, "utf-8")).append("&")
                .append("password").append("=").append(password);
        byte[] bypes = params.toString().getBytes();
        conn.getOutputStream().write(bypes);// 输入参数
        InputStream inStream=conn.getInputStream();

        ByteArrayOutputStream outStream = new ByteArrayOutputStream();
        byte[] buffer = new byte[1024];
        int len = 0;
        while( (len = inStream.read(buffer)) !=-1 ){
            outStream.write(buffer, 0, len);
        }
        byte[] data = outStream.toByteArray();//网页的二进制数据
        outStream.close();
        inStream.close();

        //处理中文乱码并返回json数据
        return new String(data, "utf-8");
    }
    //这是网站B中被跨域访问的方法
    //接收从网站A传过来的用户名和密码,验证用户名密码是否正确并返回结果
    private final static ObjectMapper objectMapper = new ObjectMapper();
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)throws ServletException, IOException {
        String username = request.getParameter("username");
        String password = request.getParameter("password");

        LoginMessage lm = new LoginMessage();
        lm.error = true;
        if ( !"true".equals(request.getParameter("isdemo")) && SecurityUtils.getSubject().isAuthenticated()) {
            lm.mes = "当前会话已经是验证通过了的.";
            lm.error = false;
        } else {
            if (Strings.isNullOrEmpty(username) || Strings.isNullOrEmpty(password)) {
                lm.mes = "用户名或密码不能为空.";
            } else {
                UsernamePasswordToken token = new UsernamePasswordToken(username, password);
                try {
                    SecurityUtils.getSubject().login(token);
                    lm.error = false;
                } catch (AuthenticationException e) {
                    if (e instanceof LockedAccountException) {
                        lm.mes = "用户密码不正确.";
                    } else {
                        lm.mes = Throwables.getRootCause(e).getMessage();
                    }
                } catch (Exception e) {
                    e.printStackTrace();
                    lm.mes = Throwables.getRootCause(e).getMessage();
                }
            }
        }
        response.setCharacterEncoding("utf-8");
        response.setHeader("Access-Control-Allow-Origin", "*");
        PrintWriter out = response.getWriter();

        out.println(objectMapper.writeValueAsString(lm));//返回jsonp格式数据
        out.flush();
        out.close();
    }

    static class LoginMessage {
        public String mes;
        public boolean error;
    }

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值