提交 7d7f8001 编写于 作者: M MaxKey

CAS 优化

上级 ddf084b7
......@@ -17,6 +17,7 @@
package org.maxkey.crypto;
import java.time.Instant;
import java.util.Date;
import org.junit.Test;
......@@ -42,7 +43,7 @@ public class DigestUtilsTest {
*/
@Test
public void testHex() {
/*
System.out.println(DigestUtils.shaHex("mytest"));
System.out.println(DigestUtils.sha1Hex("mytest"));
......@@ -55,5 +56,31 @@ public class DigestUtilsTest {
System.out.println(DigestUtils.md5Hex("seamingxy99"));
System.out.println((new Date()).getTime());
*/
//String zentaoLogin="http://127.0.0.1/biz/api.php?m=user&f=apilogin&account=%s&code=%s&time=%s&token=%s";
String zentaoLogin="http://127.0.0.1/zentao/api.php?m=user&f=apilogin&account=%s&code=%s&time=%s&token=%s";
String code = "maxkey";
//String key = "430ba509ba95094e580b925fc4839459";
String key = "f71792dfebf23d62bc4d65d1513087e3";
//String time = ""+System.currentTimeMillis();
String time = ""+Instant.now().getEpochSecond();
//String time = "1615370929";
//String code = "myApp";
//String key = "427c579384224abf9570779d82969d1e";
//String time = "1557034496";
String token =DigestUtils.md5Hex(code+key+time);
System.out.println("currentTimeMillis " + System.currentTimeMillis());
System.out.println(DigestUtils.md5Hex(code+key+time));
String account="admin";
String redirec_uri=String.format(zentaoLogin,account,code,time,token);
System.out.println("redirec_uri : \n"+redirec_uri);
}
}
......@@ -48,6 +48,8 @@ public class ReciprocalUtilsTest {
String urldecodeString="http://exchange.connsec.com/owa/?ae=Item&a=Open&t=IPM.Note&id=RgAAAABPKgpqnlfYQ7BVC%2fBfH2XIBwCS0xhUjzMYSLVky9bw7LddAAAAjov5AACS0xhUjzMYSLVky9bw7LddAAADzoy%2fAAAA&pspid=_1428036768398_867461813";
String urldcode = java.net.URLDecoder.decode(urldecodeString, "utf-8");
......@@ -65,6 +67,8 @@ public class ReciprocalUtilsTest {
encoderString="ead67db5c4f55eace090ab0044682451";
encoderString=ReciprocalUtils.decoder(encoderString);
System.out.println(encoderString );
}
}
package org.maxkey.web;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;
@Component
public class HttpRequestAdapter {
private static final Logger _logger = LoggerFactory.getLogger(HttpRequestAdapter.class);
public void post(String url,Map<String, Object> parameterMap) {
HashMap<String,String> headers = new HashMap<String,String>();
headers.put("Content-Type", "application/x-www-form-urlencoded");
post(url , parameterMap , headers);
}
public void post(String url,Map<String, Object> parameterMap,HashMap<String,String> headers) {
// 创建httpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse httpResponse = null;
// 创建httpPost远程连接实例
HttpPost httpPost = new HttpPost(url);
// 配置请求参数实例
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
.setConnectionRequestTimeout(35000)// 设置连接请求超时时间
.setSocketTimeout(60000)// 设置读取数据连接超时时间
.build();
// 为httpPost实例设置配置
httpPost.setConfig(requestConfig);
// 设置请求头
if (null != headers && headers.size() > 0) {
Set<Entry<String, String>> entrySet = headers.entrySet();
// 循环遍历,获取迭代器
Iterator<Entry<String, String>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Entry<String, String> mapEntry = iterator.next();
_logger.trace("Name " + mapEntry.getKey() + " , Value " +mapEntry.getValue());
httpPost.addHeader(mapEntry.getKey(), mapEntry.getValue());
}
}
// 封装post请求参数
if (null != parameterMap && parameterMap.size() > 0) {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
// 通过map集成entrySet方法获取entity
Set<Entry<String, Object>> entrySet = parameterMap.entrySet();
// 循环遍历,获取迭代器
Iterator<Entry<String, Object>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Entry<String, Object> mapEntry = iterator.next();
_logger.debug("Name " + mapEntry.getKey() + " , Value " +mapEntry.getValue());
nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString()));
}
// 为httpPost设置封装好的请求参数
try {
httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
_logger.debug("Post Message \n" +
httpPost.getEntity().toString()
);
}
try {
// httpClient对象执行post请求,并返回响应参数对象
httpResponse = httpClient.execute(httpPost);
// 从响应对象中获取响应内容
HttpEntity entity = httpResponse.getEntity();
_logger.debug("Http Response StatusCode " +
httpResponse.getStatusLine().getStatusCode()+
" , Content " +EntityUtils.toString(entity)
);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭资源
if (null != httpResponse) {
try {
httpResponse.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != httpClient) {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
package org.maxkey.web;
import java.io.IOException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import org.maxkey.constants.ContentType;
import org.springframework.stereotype.Component;
@Component
public class HttpResponseAdapter {
public void setContentType(
HttpServletResponse response,
String format) {
if(format == null || format.equalsIgnoreCase("") || format.equalsIgnoreCase(ResponseConstants.FORMAT_TYPE.XML)) {
response.setContentType(ContentType.APPLICATION_XML_UTF8);
}else {
response.setContentType(ContentType.APPLICATION_JSON_UTF8);
}
}
public void write(HttpServletResponse response,String content, String format) {
setContentType(response , format);
// Set to expire far in the past.
response.setDateHeader("Expires", 0);
// Set standard HTTP/1.1 no-cache headers.
response.setHeader("Cache-Control", "no-store, no-cache, must-revalidate");
// Set IE extended HTTP/1.1 no-cache headers (use addHeader).
response.addHeader("Cache-Control", "post-check=0, pre-check=0");
ServletOutputStream out = null;
try {
out = response.getOutputStream();
// write the data out
out.write(content.getBytes());
out.flush();
}catch (IOException e) {
e.printStackTrace();
} finally {
try {
if(out != null) {
out.close();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
package org.maxkey.web;
public class ResponseConstants {
public static final class FORMAT_TYPE {
/**
* Default XML response.
*/
public static final String XML="xml";
/**
* Render response in JSON.
*/
public static final String JSON="json";
}
}
......@@ -17,26 +17,9 @@
package org.maxkey.authz.singlelogout;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.maxkey.domain.apps.Apps;
import org.maxkey.web.HttpRequestAdapter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.security.core.Authentication;
......@@ -47,73 +30,7 @@ public abstract class SingleLogout {
public abstract void sendRequest(Authentication authentication,Apps logoutApp) ;
public void postMessage(String url,Map<String, Object> paramMap) {
// 创建httpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse httpResponse = null;
// 创建httpPost远程连接实例
HttpPost httpPost = new HttpPost(url);
// 配置请求参数实例
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
.setConnectionRequestTimeout(35000)// 设置连接请求超时时间
.setSocketTimeout(60000)// 设置读取数据连接超时时间
.build();
// 为httpPost实例设置配置
httpPost.setConfig(requestConfig);
// 设置请求头
httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
// 封装post请求参数
if (null != paramMap && paramMap.size() > 0) {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
// 通过map集成entrySet方法获取entity
Set<Entry<String, Object>> entrySet = paramMap.entrySet();
// 循环遍历,获取迭代器
Iterator<Entry<String, Object>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Entry<String, Object> mapEntry = iterator.next();
_logger.debug("Name " + mapEntry.getKey() + " , Value " +mapEntry.getValue());
nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString()));
}
// 为httpPost设置封装好的请求参数
try {
httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
_logger.debug("Post Message \n" +
httpPost.getEntity().toString()
);
}
try {
_logger.debug("Post URL " + url );
// httpClient对象执行post请求,并返回响应参数对象
httpResponse = httpClient.execute(httpPost);
// 从响应对象中获取响应内容
HttpEntity entity = httpResponse.getEntity();
_logger.debug("Http Response StatusCode " +
httpResponse.getStatusLine().getStatusCode()+
" , Content " +EntityUtils.toString(entity)
);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭资源
if (null != httpResponse) {
try {
httpResponse.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != httpClient) {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
_logger.trace("post message to url " + url);
(new HttpRequestAdapter()).post(url , paramMap);
}
}
......@@ -34,8 +34,10 @@ import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter;
import org.maxkey.constants.Boolean;
import org.maxkey.domain.UserInfo;
import org.maxkey.util.Instance;
import org.maxkey.web.ResponseConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.http.MediaType;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
......@@ -169,7 +171,7 @@ INTERNAL_ERROR - an internal error occurred during ticket validation
For all error codes, it is RECOMMENDED that CAS provide a more detailed message as the body of the \<cas:authenticationFailure\> block of the XML response.
*/
@ApiOperation(value = "CAS 2.0 ticket验证接口", notes = "通过ticket获取当前登录用户信息",httpMethod="POST")
@RequestMapping("/authz/cas/serviceValidate")
@RequestMapping(value="/authz/cas/serviceValidate",produces =MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public String serviceValidate(
HttpServletRequest request,
......@@ -178,7 +180,7 @@ For all error codes, it is RECOMMENDED that CAS provide a more detailed message
@RequestParam(value = CasConstants.PARAMETER.SERVICE) String service,
@RequestParam(value = CasConstants.PARAMETER.PROXY_CALLBACK_URL,required=false) String pgtUrl,
@RequestParam(value = CasConstants.PARAMETER.RENEW,required=false) String renew,
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=CasConstants.FORMAT_TYPE.XML) String format){
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=ResponseConstants.FORMAT_TYPE.XML) String format){
_logger.debug("serviceValidate "
+ " ticket " + ticket
+" , service " + service
......@@ -187,8 +189,6 @@ For all error codes, it is RECOMMENDED that CAS provide a more detailed message
+" , format " + format
);
setContentType(request,response,format);
Ticket storedTicket=null;
if(ticket.startsWith(CasConstants.PREFIX.SERVICE_TICKET_PREFIX)) {
try {
......@@ -215,7 +215,7 @@ For all error codes, it is RECOMMENDED that CAS provide a more detailed message
serviceResponseBuilder.success().setTicket(proxyGrantingTicketIOU);
serviceResponseBuilder.success().setProxy(pgtUrl);
postMessage(pgtUrl+"?pgtId="+proxyGrantingTicket+"&pgtIou="+proxyGrantingTicketIOU,null);
httpRequestAdapter.post(pgtUrl+"?pgtId="+proxyGrantingTicket+"&pgtIou="+proxyGrantingTicketIOU,null);
}
if(Boolean.isTrue(storedTicket.getCasDetails().getIsAdapter())){
......@@ -294,7 +294,7 @@ Response on ticket validation failure:
*/
@ApiOperation(value = "CAS 2.0 ticket代理验证接口", notes = "通过ticket获取当前登录用户信息",httpMethod="POST")
@RequestMapping("/authz/cas/proxyValidate")
@RequestMapping(value="/authz/cas/proxyValidate",produces =MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public String proxy(
HttpServletRequest request,
......@@ -303,7 +303,7 @@ Response on ticket validation failure:
@RequestParam(value = CasConstants.PARAMETER.SERVICE) String service,
@RequestParam(value = CasConstants.PARAMETER.PROXY_CALLBACK_URL,required=false) String pgtUrl,
@RequestParam(value = CasConstants.PARAMETER.RENEW,required=false) String renew,
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=CasConstants.FORMAT_TYPE.XML) String format){
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=ResponseConstants.FORMAT_TYPE.XML) String format){
_logger.debug("proxyValidate "
+ " ticket " + ticket
+" , service " + service
......@@ -311,7 +311,6 @@ Response on ticket validation failure:
+" , renew " + renew
+" , format " + format
);
setContentType(request,response,format);
Ticket storedTicket=null;
if(ticket.startsWith(CasConstants.PREFIX.PROXY_TICKET_PREFIX)) {
......@@ -396,28 +395,29 @@ INTERNAL_ERROR - an internal error occurred during ticket validation
For all error codes, it is RECOMMENDED that CAS provide a more detailed message as the body of the <cas:authenticationFailure> block of the XML response.
*/
@RequestMapping("/authz/cas/proxy")
@RequestMapping(value="/authz/cas/proxy" ,produces =MediaType.APPLICATION_XML_VALUE)
@ResponseBody
public String proxy(
HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value = CasConstants.PARAMETER.PROXY_GRANTING_TICKET) String pgt,
@RequestParam(value = CasConstants.PARAMETER.TARGET_SERVICE) String targetService,
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=CasConstants.FORMAT_TYPE.XML) String format){
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=ResponseConstants.FORMAT_TYPE.XML) String format){
_logger.debug("proxy "
+ " pgt " + pgt
+" , targetService " + targetService
+" , format " + format
);
setContentType(request,response,format);
ProxyServiceResponseBuilder proxyServiceResponseBuilder=new ProxyServiceResponseBuilder();
ProxyGrantingTicketImpl proxyGrantingTicketImpl = (ProxyGrantingTicketImpl)casProxyGrantingTicketServices.get(pgt);
if(proxyGrantingTicketImpl != null) {
ProxyTicketImpl ProxyTicketImpl = new ProxyTicketImpl(proxyGrantingTicketImpl.getAuthentication(),proxyGrantingTicketImpl.getCasDetails());
String proxyTicket =ticketServices.createTicket(ProxyTicketImpl);
ProxyServiceResponseBuilder proxyServiceResponseBuilder=new ProxyServiceResponseBuilder();
return proxyServiceResponseBuilder.success().setTicket(proxyTicket).setFormat(format).serviceResponseBuilder();
proxyServiceResponseBuilder.success().setTicket(proxyTicket).setFormat(format);
}else {
proxyServiceResponseBuilder.success().setTicket("").setFormat(format);
}
ProxyServiceResponseBuilder proxyServiceResponseBuilder=new ProxyServiceResponseBuilder();
return proxyServiceResponseBuilder.success().setTicket("").setFormat(format).serviceResponseBuilder();
return proxyServiceResponseBuilder.serviceResponseBuilder();
}
}
......@@ -35,13 +35,12 @@ import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter;
import org.maxkey.constants.Boolean;
import org.maxkey.domain.UserInfo;
import org.maxkey.util.Instance;
import org.maxkey.web.ResponseConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiOperation;
......@@ -56,16 +55,15 @@ public class Cas30AuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
final static Logger _logger = LoggerFactory.getLogger(Cas30AuthorizeEndpoint.class);
@ApiOperation(value = "CAS 3.0 ticket验证接口", notes = "通过ticket获取当前登录用户信息",httpMethod="POST")
@RequestMapping("/authz/cas/p3/serviceValidate")
@ResponseBody
public String serviceValidate(
@RequestMapping(value="/authz/cas/p3/serviceValidate")
public void serviceValidate(
HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value = CasConstants.PARAMETER.TICKET) String ticket,
@RequestParam(value = CasConstants.PARAMETER.SERVICE) String service,
@RequestParam(value = CasConstants.PARAMETER.PROXY_CALLBACK_URL,required=false) String pgtUrl,
@RequestParam(value = CasConstants.PARAMETER.RENEW,required=false) String renew,
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=CasConstants.FORMAT_TYPE.XML) String format){
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=ResponseConstants.FORMAT_TYPE.XML) String format){
_logger.debug("serviceValidate "
+ " ticket " + ticket
+" , service " + service
......@@ -74,8 +72,6 @@ public class Cas30AuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
+" , format " + format
);
setContentType(request,response,format);
Ticket storedTicket=null;
if(ticket.startsWith(CasConstants.PREFIX.SERVICE_TICKET_PREFIX)) {
try {
......@@ -102,7 +98,7 @@ setContentType(request,response,format);
serviceResponseBuilder.success().setTicket(proxyGrantingTicketIOU);
serviceResponseBuilder.success().setProxy(pgtUrl);
postMessage(pgtUrl+"?pgtId="+proxyGrantingTicket+"&pgtIou="+proxyGrantingTicketIOU,null);
httpRequestAdapter.post(pgtUrl+"?pgtId="+proxyGrantingTicket+"&pgtIou="+proxyGrantingTicketIOU,null);
}
if(Boolean.isTrue(storedTicket.getCasDetails().getIsAdapter())){
......@@ -116,46 +112,45 @@ setContentType(request,response,format);
.setDescription("Ticket "+ticket+" not recognized");
}
return serviceResponseBuilder.serviceResponseBuilder();
httpResponseAdapter.write(response,serviceResponseBuilder.serviceResponseBuilder(),format);
}
@ApiOperation(value = "CAS 3.0 ProxyTicket代理验证接口", notes = "通过ProxyGrantingTicket获取ProxyTicket",httpMethod="POST")
@RequestMapping("/authz/cas/p3/proxy")
@ResponseBody
public String proxy(
public void proxy(
HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value = CasConstants.PARAMETER.PROXY_GRANTING_TICKET) String pgt,
@RequestParam(value = CasConstants.PARAMETER.TARGET_SERVICE) String targetService,
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=CasConstants.FORMAT_TYPE.XML) String format){
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=ResponseConstants.FORMAT_TYPE.XML) String format){
_logger.debug("proxy "
+ " pgt " + pgt
+" , targetService " + targetService
+" , format " + format
);
setContentType(request,response,format);
ProxyServiceResponseBuilder proxyServiceResponseBuilder=new ProxyServiceResponseBuilder();
ProxyGrantingTicketImpl proxyGrantingTicketImpl = (ProxyGrantingTicketImpl)casProxyGrantingTicketServices.get(pgt);
if(proxyGrantingTicketImpl != null) {
ProxyTicketImpl ProxyTicketImpl = new ProxyTicketImpl(proxyGrantingTicketImpl.getAuthentication(),proxyGrantingTicketImpl.getCasDetails());
String proxyTicket =ticketServices.createTicket(ProxyTicketImpl);
ProxyServiceResponseBuilder proxyServiceResponseBuilder=new ProxyServiceResponseBuilder();
return proxyServiceResponseBuilder.success().setTicket(proxyTicket).setFormat(format).serviceResponseBuilder();
proxyServiceResponseBuilder.success().setTicket(proxyTicket).setFormat(format);
}else {
proxyServiceResponseBuilder.success().setTicket("").setFormat(format);
}
ProxyServiceResponseBuilder proxyServiceResponseBuilder=new ProxyServiceResponseBuilder();
return proxyServiceResponseBuilder.success().setTicket("").setFormat(format).serviceResponseBuilder();
httpResponseAdapter.write(response,proxyServiceResponseBuilder.serviceResponseBuilder(),format);
}
@ApiOperation(value = "CAS 3.0 ticket代理验证接口", notes = "通过ProxyTicket获取当前登录用户信息",httpMethod="POST")
@RequestMapping("/authz/cas/p3/proxyValidate")
@ResponseBody
public String proxy(
public void proxy(
HttpServletRequest request,
HttpServletResponse response,
@RequestParam(value = CasConstants.PARAMETER.TICKET) String ticket,
@RequestParam(value = CasConstants.PARAMETER.SERVICE) String service,
@RequestParam(value = CasConstants.PARAMETER.PROXY_CALLBACK_URL,required=false) String pgtUrl,
@RequestParam(value = CasConstants.PARAMETER.RENEW,required=false) String renew,
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=CasConstants.FORMAT_TYPE.XML) String format){
@RequestParam(value = CasConstants.PARAMETER.FORMAT,required=false,defaultValue=ResponseConstants.FORMAT_TYPE.XML) String format){
_logger.debug("proxyValidate "
+ " ticket " + ticket
+" , service " + service
......@@ -163,7 +158,6 @@ setContentType(request,response,format);
+" , renew " + renew
+" , format " + format
);
setContentType(request,response,format);
Ticket storedTicket=null;
if(ticket.startsWith(CasConstants.PREFIX.PROXY_TICKET_PREFIX)) {
......@@ -191,7 +185,6 @@ setContentType(request,response,format);
.setCode(CasConstants.ERROR_CODE.INVALID_TICKET)
.setDescription("Ticket "+ticket+" not recognized");
}
return serviceResponseBuilder.serviceResponseBuilder();
httpResponseAdapter.write(response,serviceResponseBuilder.serviceResponseBuilder(),format);
}
}
......@@ -112,10 +112,11 @@ public class CasAuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
callbackUrl.append("?");
}
if(callbackUrl.indexOf("&") != -1) {
if(callbackUrl.indexOf("&") != -1 ||callbackUrl.indexOf("=") != -1) {
callbackUrl.append("&");
}
//append ticket
callbackUrl.append(CasConstants.PARAMETER.TICKET).append("=").append(ticket);
......
......@@ -17,37 +17,15 @@
package org.maxkey.authz.cas.endpoint;
import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Map.Entry;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.http.HttpEntity;
import org.apache.http.NameValuePair;
import org.apache.http.client.config.RequestConfig;
import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.maxkey.authn.online.OnlineTicketServices;
import org.maxkey.authz.cas.endpoint.ticket.CasConstants;
import org.maxkey.authz.cas.endpoint.ticket.TicketServices;
import org.maxkey.authz.endpoint.AuthorizeBaseEndpoint;
import org.maxkey.constants.ContentType;
import org.maxkey.persistence.service.AppsCasDetailsService;
import org.maxkey.persistence.service.UserInfoService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.maxkey.web.HttpResponseAdapter;
import org.maxkey.web.HttpRequestAdapter;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Qualifier;
......@@ -78,86 +56,10 @@ public class CasBaseAuthorizeEndpoint extends AuthorizeBaseEndpoint{
@Qualifier("casProxyGrantingTicketServices")
protected TicketServices casProxyGrantingTicketServices;
@Autowired
protected HttpResponseAdapter httpResponseAdapter;
public void setContentType(
HttpServletRequest request,
HttpServletResponse response,
String format) {
if(format == null || format.equalsIgnoreCase("") || format.equalsIgnoreCase(CasConstants.FORMAT_TYPE.XML)) {
//response.setContentType(ContentType.APPLICATION_XML_UTF8);
}else {
response.setContentType(ContentType.APPLICATION_JSON_UTF8);
}
}
@Autowired
protected HttpRequestAdapter httpRequestAdapter;
public void postMessage(String url,Map<String, Object> paramMap) {
// 创建httpClient实例
CloseableHttpClient httpClient = HttpClients.createDefault();
CloseableHttpResponse httpResponse = null;
// 创建httpPost远程连接实例
HttpPost httpPost = new HttpPost(url);
// 配置请求参数实例
RequestConfig requestConfig = RequestConfig.custom().setConnectTimeout(35000)// 设置连接主机服务超时时间
.setConnectionRequestTimeout(35000)// 设置连接请求超时时间
.setSocketTimeout(60000)// 设置读取数据连接超时时间
.build();
// 为httpPost实例设置配置
httpPost.setConfig(requestConfig);
// 设置请求头
httpPost.addHeader("Content-Type", "application/x-www-form-urlencoded");
// 封装post请求参数
if (null != paramMap && paramMap.size() > 0) {
List<NameValuePair> nvps = new ArrayList<NameValuePair>();
// 通过map集成entrySet方法获取entity
Set<Entry<String, Object>> entrySet = paramMap.entrySet();
// 循环遍历,获取迭代器
Iterator<Entry<String, Object>> iterator = entrySet.iterator();
while (iterator.hasNext()) {
Entry<String, Object> mapEntry = iterator.next();
_logger.debug("Name " + mapEntry.getKey() + " , Value " +mapEntry.getValue());
nvps.add(new BasicNameValuePair(mapEntry.getKey(), mapEntry.getValue().toString()));
}
// 为httpPost设置封装好的请求参数
try {
httpPost.setEntity(new UrlEncodedFormEntity(nvps, "UTF-8"));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
_logger.debug("Post Message \n" +
httpPost.getEntity().toString()
);
}
try {
// httpClient对象执行post请求,并返回响应参数对象
httpResponse = httpClient.execute(httpPost);
// 从响应对象中获取响应内容
HttpEntity entity = httpResponse.getEntity();
_logger.debug("Http Response StatusCode " +
httpResponse.getStatusLine().getStatusCode()+
" , Content " +EntityUtils.toString(entity)
);
} catch (Exception e) {
e.printStackTrace();
} finally {
// 关闭资源
if (null != httpResponse) {
try {
httpResponse.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (null != httpClient) {
try {
httpClient.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
......@@ -31,6 +31,7 @@ import org.maxkey.authz.cas.endpoint.ticket.ServiceTicketImpl;
import org.maxkey.authz.cas.endpoint.ticket.TicketGrantingTicketImpl;
import org.maxkey.domain.UserInfo;
import org.maxkey.domain.apps.AppsCasDetails;
import org.maxkey.web.ResponseConstants;
import org.maxkey.web.WebContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -195,7 +196,7 @@ public class CasRestV1Endpoint extends CasBaseAuthorizeEndpoint{
HttpHeaders headers = new HttpHeaders();
headers.add("location", location);
ServiceResponseBuilder serviceResponseBuilder=new ServiceResponseBuilder();
serviceResponseBuilder.setFormat(CasConstants.FORMAT_TYPE.JSON);
serviceResponseBuilder.setFormat(ResponseConstants.FORMAT_TYPE.JSON);
//for user
serviceResponseBuilder.setAttribute("uid", userInfo.getId());
serviceResponseBuilder.setAttribute("displayName",userInfo.getDisplayName());
......
......@@ -19,8 +19,7 @@ package org.maxkey.authz.cas.endpoint.response;
import java.util.ArrayList;
import java.util.HashMap;
import org.maxkey.authz.cas.endpoint.ticket.CasConstants;
import org.maxkey.web.ResponseConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -32,7 +31,7 @@ public class CasServiceResponse {
protected boolean result=false;
protected String user;
protected String ticket;
protected String format=CasConstants.FORMAT_TYPE.XML;
protected String format=ResponseConstants.FORMAT_TYPE.XML;
protected ArrayList<String >proxies=new ArrayList<String>();
protected HashMap<String,ArrayList<String>>casAttributes=new HashMap<String,ArrayList<String>>();
......
......@@ -17,7 +17,7 @@
package org.maxkey.authz.cas.endpoint.response;
import org.maxkey.authz.cas.endpoint.ticket.CasConstants;
import org.maxkey.web.ResponseConstants;
public class ProxyServiceResponseBuilder extends ServiceResponseBuilder{
......@@ -28,7 +28,7 @@ public class ProxyServiceResponseBuilder extends ServiceResponseBuilder{
@Override
public String serviceResponseBuilder() {
String responseString = "";
if(format.equalsIgnoreCase(CasConstants.FORMAT_TYPE.XML)){
if(format.equalsIgnoreCase(ResponseConstants.FORMAT_TYPE.XML)){
responseString = serviceResponseXmlBuilder();
}else{
responseString =serviceResponseJsonBuilder();
......
......@@ -19,8 +19,7 @@ package org.maxkey.authz.cas.endpoint.response;
import java.util.ArrayList;
import java.util.Iterator;
import org.maxkey.authz.cas.endpoint.ticket.CasConstants;
import org.maxkey.web.ResponseConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
......@@ -30,7 +29,7 @@ public class ServiceResponseBuilder extends CasServiceResponse {
@Override
public String serviceResponseBuilder() {
String responseString = "";
if(format.equalsIgnoreCase(CasConstants.FORMAT_TYPE.XML)){
if(format.equalsIgnoreCase(ResponseConstants.FORMAT_TYPE.XML)){
responseString= serviceResponseXmlBuilder();
}else{
responseString= serviceResponseJsonBuilder();
......
......@@ -63,17 +63,6 @@ public class CasConstants {
public static final String REST_PASSWORD = "password";
}
public static final class FORMAT_TYPE {
/**
* Default CAS XML response.
*/
public static final String XML="xml";
/**
* Render response in JSON.
*/
public static final String JSON="json";
}
/* CAS Protocol PREFIX */
public static final class PREFIX{
/** Proxy ticket prefix applied to unique ids. */
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册