Java tutorial
/* * Copyright (C) 2005 - 2014 Jaspersoft Corporation. All rights reserved. * http://www.jaspersoft.com. * * Unless you have purchased a commercial license agreement from Jaspersoft, * the following license terms apply: * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ package com.jaspersoft.jasperserver.jaxrs.client.core; import com.jaspersoft.jasperserver.jaxrs.client.core.exceptions.handling.DefaultErrorHandler; import com.jaspersoft.jasperserver.jaxrs.client.filters.SessionOutputFilter; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.glassfish.jersey.client.ClientProperties; import javax.net.ssl.HostnameVerifier; import javax.net.ssl.SSLContext; import javax.net.ssl.SSLSession; import javax.ws.rs.client.Client; import javax.ws.rs.client.ClientBuilder; import javax.ws.rs.client.Entity; import javax.ws.rs.client.WebTarget; import javax.ws.rs.core.Form; import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.security.SecureRandom; public class SessionStorage { private static final Log log = LogFactory.getLog(SessionStorage.class); private RestClientConfiguration configuration; private AuthenticationCredentials credentials; private WebTarget rootTarget; private String sessionId; public SessionStorage(RestClientConfiguration configuration, AuthenticationCredentials credentials) { this.configuration = configuration; this.credentials = credentials; init(); } private void initSSL(ClientBuilder clientBuilder) { try { SSLContext sslContext = SSLContext.getInstance("SSL"); HostnameVerifier hostnameVerifier = new HostnameVerifier() { @Override public boolean verify(String s, SSLSession sslSession) { return true; } }; sslContext.init(null, configuration.getTrustManagers(), new SecureRandom()); clientBuilder.sslContext(sslContext); clientBuilder.hostnameVerifier(hostnameVerifier); } catch (Exception e) { log.error("Unable inFolder init SSL context", e); throw new RuntimeException("Unable inFolder init SSL context", e); } } private void init() { ClientBuilder clientBuilder = ClientBuilder.newBuilder(); if (configuration.getJasperReportsServerUrl().startsWith("https")) { initSSL(clientBuilder); } Client client = clientBuilder.build(); Integer connectionTimeout = configuration.getConnectionTimeout(); if (connectionTimeout != null) client.property(ClientProperties.CONNECT_TIMEOUT, connectionTimeout); Integer readTimeout = configuration.getReadTimeout(); if (readTimeout != null) client.property(ClientProperties.READ_TIMEOUT, readTimeout); rootTarget = client.target(configuration.getJasperReportsServerUrl()); login(); rootTarget.register(new SessionOutputFilter(sessionId)); } private void login() { Form form = new Form(); form.param("j_username", credentials.getUsername()).param("j_password", credentials.getPassword()); WebTarget target = rootTarget.path("/rest/login"); Response response = target.request().post(Entity.entity(form, MediaType.APPLICATION_FORM_URLENCODED_TYPE)); if (response.getStatus() == ResponseStatus.OK) this.sessionId = response.getCookies().get("JSESSIONID").getValue(); else new DefaultErrorHandler().handleError(response); } public RestClientConfiguration getConfiguration() { return configuration; } public AuthenticationCredentials getCredentials() { return credentials; } public String getSessionId() { return sessionId; } public WebTarget getRootTarget() { return rootTarget; } }