[点点搬家] 声讨一下Jersey Client,或者鄙视一下Tomcat realm

[两年前的博客,各种解决问题啊]


昨天5:30到刚刚,几乎花了一人天的时间。

问题如下,想用Jersey Client登陆一个Tomcat Realm权限管理的网站。

用Chrome访问的过程是[GET 资源]->重定向到登陆页->[POST 登陆信息]->重定向到资源并且有权限。

我用Jersey Client参照了如上步骤,[GET 资源]->获取Set-Cookie头->[POST 登录信息 with Cookie]->访问资源看是否有权限。总之就是照着浏览器的请求一条一条来,但是登陆的总是会返回登陆页面并且有个LOGIN_PAGE为 TRUE的头。

郁闷的奋战一天,最后同事各种帮忙各种不理解的情况下,在浏览器试了一下GET方法登陆,结果可以,于是在Jersey Client中也用了GET方法,然后就ok了……你说,这是为啥啊!

下面是一些关键的代码:

//这段为了把Response给你的cookie全都拷贝到你的下一个request中去,很有用。当然也可以自己写头,但是容易出错
client.addFilter(new ClientFilter() {
            private ArrayList<Object> cookies;
         
            @Override
            public ClientResponse handle(ClientRequest request) throws ClientHandlerException {
                if (cookies != null) {
                    request.getHeaders().put("Cookie", cookies);
                }
                ClientResponse response = getNext().handle(request);
                // copy cookies
                if (response.getCookies() != null) {
                    if (cookies == null) {
                        cookies = new ArrayList<Object>();
                    }
                    cookies.addAll(response.getCookies());
                }
                return response;
            }
        });
//这是一段伤痕累累的登陆代码,从其间凌乱的布局和折翼的注释可以看出来这一天中她经历了什么。
// Login:
        WebResource webResource = client.resource("http://192.168.0.200:18080/edoc/resources/mgtskdjfklsjklfjdklsj").path("/j_security_check;jsessionid="+jsessionid);
        Form form = new Form();
        form.add("j_username", "admin");
        form.add("j_password", "111111");
               
        //form.putSingle("commit", "现在登陆");
        MultivaluedMap<String, String> queryParams = new MultivaluedMapImpl();
           queryParams.add("j_username", "admin");
           queryParams.add("j_password", "111111");
        ClientResponse auth_Response = webResource.queryParams(queryParams).type("application/x-www-form-urlencoded")
                /*.header("Accept", "text/html,application/xhtml+xml,application/xml;q=0.8")
                .header("Accept-Charset", "GBK,utf-8;q=0.7,*;q=0.3")
                .header("Accept-Encoding","gzip,deflate,sdch")
                .header("Accept-Language", "zh-CN,zh;q=0.8")
                .header("Cache-Control", "max-age=0")
                .header("Cookie", "JSESSIONID=" + jsessionid)
                //.cookie(cookies.get(0))
                .header("User-Agent", "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_8_1) AppleWebKit/537.1 (KHTML, like Gecko) Chrome/21.0.1180.15 Safari/537.1")
                .header("Host", "192.168.0.200:18080")
                .header("Origin", "http://192.168.0.200:18080")
                .header("Referer", "http://192.168.0.200:18080/edoc/resources/mgt/audit/view")
                .header("Connection", "keep-alive")*/
                //.header("Content-Length", 78)
                //.post(ClientResponse.class, form)
                .get(ClientResponse.class);

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值