This commit is contained in:
MaxKey
2022-02-13 15:08:08 +08:00
parent 3b8b998e89
commit 120f8b3d8e
79 changed files with 1984 additions and 1489 deletions

View File

@@ -97,14 +97,14 @@ renew [OPTIONAL] - if this parameter is set, ticket validation will only succeed
+" , renew " + renew
);
Ticket storedTicket=null;
Ticket storedTicket = null;
try {
storedTicket = ticketServices.consumeTicket(ticket);
} catch (Exception e) {
_logger.error("consume Ticket error " , e);
}
if(storedTicket!=null){
if(storedTicket != null){
String principal=((SigninPrincipal)storedTicket.getAuthentication().getPrincipal()).getUsername();
_logger.debug("principal "+principal);
return new Service10ResponseBuilder().success()

View File

@@ -20,8 +20,12 @@
*/
package org.maxkey.authz.cas.endpoint;
import java.lang.reflect.InvocationTargetException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.maxkey.authn.SigninPrincipal;
import org.maxkey.authz.cas.endpoint.response.ProxyServiceResponseBuilder;
import org.maxkey.authz.cas.endpoint.response.ServiceResponseBuilder;
@@ -202,9 +206,6 @@ For all error codes, it is RECOMMENDED that CAS provide a more detailed message
if(storedTicket!=null){
SigninPrincipal authentication = ((SigninPrincipal)storedTicket.getAuthentication().getPrincipal());
String principal=authentication.getUsername();
_logger.debug("principal "+principal);
serviceResponseBuilder.success().setUser(principal);
if(StringUtils.isNotBlank(pgtUrl)) {
ProxyGrantingTicketIOUImpl proxyGrantingTicketIOUImpl =new ProxyGrantingTicketIOUImpl();
String proxyGrantingTicketIOU=casProxyGrantingTicketServices.createTicket(proxyGrantingTicketIOUImpl);
@@ -219,9 +220,21 @@ For all error codes, it is RECOMMENDED that CAS provide a more detailed message
}
if(ConstsBoolean.isTrue(storedTicket.getCasDetails().getIsAdapter())){
AbstractAuthorizeAdapter adapter =(AbstractAuthorizeAdapter)Instance.newInstance(storedTicket.getCasDetails().getAdapter());
UserInfo userInfo = (UserInfo) userInfoService.findByUsername(principal);
adapter.generateInfo(authentication,userInfo, serviceResponseBuilder);
Object samlAdapter = Instance.newInstance(storedTicket.getCasDetails().getAdapter());
try {
BeanUtils.setProperty(samlAdapter, "serviceResponseBuilder", serviceResponseBuilder);
} catch (IllegalAccessException | InvocationTargetException e) {
_logger.error("setProperty error . ", e);
}
UserInfo userInfo = (UserInfo) userInfoService.findByUsername(authentication.getUsername());
AbstractAuthorizeAdapter adapter =(AbstractAuthorizeAdapter)samlAdapter;
adapter.setAuthentication(authentication);
adapter.setUserInfo(userInfo);
adapter.setApp(storedTicket.getCasDetails());
adapter.generateInfo();
}
}else{
serviceResponseBuilder.failure()
@@ -324,14 +337,21 @@ Response on ticket validation failure:
if(storedTicket!=null){
SigninPrincipal authentication = ((SigninPrincipal)storedTicket.getAuthentication().getPrincipal());
String principal=authentication.getUsername();
_logger.debug("principal "+principal);
serviceResponseBuilder.success().setUser(principal);
if(ConstsBoolean.isTrue(storedTicket.getCasDetails().getIsAdapter())){
AbstractAuthorizeAdapter adapter =(AbstractAuthorizeAdapter)Instance.newInstance(storedTicket.getCasDetails().getAdapter());
UserInfo userInfo = (UserInfo) userInfoService.findByUsername(principal);
adapter.generateInfo(authentication,userInfo, serviceResponseBuilder);
Object samlAdapter = Instance.newInstance(storedTicket.getCasDetails().getAdapter());
try {
BeanUtils.setProperty(samlAdapter, "serviceResponseBuilder", serviceResponseBuilder);
} catch (IllegalAccessException | InvocationTargetException e) {
_logger.error("setProperty error . ", e);
}
UserInfo userInfo = (UserInfo) userInfoService.findByUsername(authentication.getUsername());
AbstractAuthorizeAdapter adapter =(AbstractAuthorizeAdapter)samlAdapter;
adapter.setAuthentication(authentication);
adapter.setUserInfo(userInfo);
adapter.setApp(storedTicket.getCasDetails());
adapter.generateInfo();
}
}else{
serviceResponseBuilder.failure()

View File

@@ -20,9 +20,12 @@
*/
package org.maxkey.authz.cas.endpoint;
import java.lang.reflect.InvocationTargetException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.beanutils.BeanUtils;
import org.maxkey.authn.SigninPrincipal;
import org.maxkey.authz.cas.endpoint.response.ProxyServiceResponseBuilder;
import org.maxkey.authz.cas.endpoint.response.ServiceResponseBuilder;
@@ -85,9 +88,6 @@ public class Cas30AuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
if(storedTicket!=null){
SigninPrincipal authentication = ((SigninPrincipal)storedTicket.getAuthentication().getPrincipal());
String principal=authentication.getUsername();
_logger.debug("principal "+principal);
serviceResponseBuilder.success().setUser(principal);
if(StringUtils.isNotBlank(pgtUrl)) {
ProxyGrantingTicketIOUImpl proxyGrantingTicketIOUImpl =new ProxyGrantingTicketIOUImpl();
String proxyGrantingTicketIOU=casProxyGrantingTicketServices.createTicket(proxyGrantingTicketIOUImpl);
@@ -102,9 +102,20 @@ public class Cas30AuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
}
if(ConstsBoolean.isTrue(storedTicket.getCasDetails().getIsAdapter())){
AbstractAuthorizeAdapter adapter =(AbstractAuthorizeAdapter)Instance.newInstance(storedTicket.getCasDetails().getAdapter());
UserInfo userInfo = (UserInfo) userInfoService.findByUsername(principal);
adapter.generateInfo(authentication,userInfo, serviceResponseBuilder);
Object samlAdapter = Instance.newInstance(storedTicket.getCasDetails().getAdapter());
try {
BeanUtils.setProperty(samlAdapter, "serviceResponseBuilder", serviceResponseBuilder);
} catch (IllegalAccessException | InvocationTargetException e) {
_logger.error("setProperty error . ", e);
}
UserInfo userInfo = (UserInfo) userInfoService.findByUsername(authentication.getUsername());
AbstractAuthorizeAdapter adapter =(AbstractAuthorizeAdapter)samlAdapter;
adapter.setAuthentication(authentication);
adapter.setUserInfo(userInfo);
adapter.setApp(storedTicket.getCasDetails());
adapter.generateInfo();
}
}else{
serviceResponseBuilder.failure()
@@ -171,14 +182,21 @@ public class Cas30AuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
if(storedTicket!=null){
SigninPrincipal authentication = ((SigninPrincipal)storedTicket.getAuthentication().getPrincipal());
String principal=authentication.getUsername();
_logger.debug("principal "+principal);
serviceResponseBuilder.success().setUser(principal);
if(ConstsBoolean.isTrue(storedTicket.getCasDetails().getIsAdapter())){
AbstractAuthorizeAdapter adapter =(AbstractAuthorizeAdapter)Instance.newInstance(storedTicket.getCasDetails().getAdapter());
UserInfo userInfo = (UserInfo) userInfoService.findByUsername(principal);
adapter.generateInfo(authentication,userInfo, serviceResponseBuilder);
Object samlAdapter = Instance.newInstance(storedTicket.getCasDetails().getAdapter());
try {
BeanUtils.setProperty(samlAdapter, "serviceResponseBuilder", serviceResponseBuilder);
} catch (IllegalAccessException | InvocationTargetException e) {
_logger.error("setProperty error . ", e);
}
UserInfo userInfo = (UserInfo) userInfoService.findByUsername(authentication.getUsername());
AbstractAuthorizeAdapter adapter =(AbstractAuthorizeAdapter)samlAdapter;
adapter.setAuthentication(authentication);
adapter.setUserInfo(userInfo);
adapter.setApp(storedTicket.getCasDetails());
adapter.generateInfo();
}
}else{
serviceResponseBuilder.failure()

View File

@@ -90,7 +90,7 @@ public class CasAuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
_logger.debug(""+casDetails);
Map<String, String> parameterMap = WebContext.getRequestParameterMap(request);
String service = casService;
_logger.debug("CAS Parameter service = " + service);
_logger.debug("CAS Parameter service = {}" , service);
if(casService.indexOf("?") >-1 ) {
service = casService.substring(casService.indexOf("?") + 1);
if(service.indexOf("=") > -1) {
@@ -99,7 +99,7 @@ public class CasAuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
parameterMap.put(parameterValues[0], parameterValues[1]);
}
}
_logger.debug("CAS service with Parameter : " + service);
_logger.debug("CAS service with Parameter : {}" , parameterMap);
}
WebContext.setAttribute(
CasConstants.PARAMETER.PARAMETER_MAP,
@@ -117,10 +117,10 @@ public class CasAuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
@AuthenticationPrincipal Object user,
HttpServletRequest request,
HttpServletResponse response){
AppsCasDetails casDetails=(AppsCasDetails)WebContext.getAttribute(CasConstants.PARAMETER.ENDPOINT_CAS_DETAILS);
ServiceTicketImpl serviceTicket=new ServiceTicketImpl(WebContext.getAuthentication(),casDetails);
AppsCasDetails casDetails = (AppsCasDetails)WebContext.getAttribute(CasConstants.PARAMETER.ENDPOINT_CAS_DETAILS);
ServiceTicketImpl serviceTicket = new ServiceTicketImpl(WebContext.getAuthentication(),casDetails);
String ticket=ticketServices.createTicket(serviceTicket);
String ticket = ticketServices.createTicket(serviceTicket);
StringBuffer callbackUrl = new StringBuffer(casDetails.getCallbackUrl());
if(casDetails.getCallbackUrl().indexOf("?")==-1) {
@@ -158,7 +158,7 @@ public class CasAuthorizeEndpoint extends CasBaseAuthorizeEndpoint{
onlineTicketServices.store(onlineTicketId, onlineTicket);
}
_logger.debug("redirect to CAS Client URL " + callbackUrl);
_logger.debug("redirect to CAS Client URL {}" , callbackUrl);
ModelAndView modelAndView=new ModelAndView("authorize/cas_sso_submint");
modelAndView.addObject("callbackUrl", callbackUrl.toString());

View File

@@ -20,21 +20,25 @@ package org.maxkey.authz.cas.endpoint.adapter;
import java.io.UnsupportedEncodingException;
import org.apache.commons.codec.binary.Base64;
import org.maxkey.authn.SigninPrincipal;
import org.maxkey.authz.cas.endpoint.response.ServiceResponseBuilder;
import org.maxkey.authz.endpoint.adapter.AbstractAuthorizeAdapter;
import org.maxkey.entity.UserInfo;
import org.maxkey.entity.apps.AppsCasDetails;
import org.maxkey.web.WebConstants;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.ModelAndView;
public class CasDefaultAdapter extends AbstractAuthorizeAdapter {
final static Logger _logger = LoggerFactory.getLogger(CasDefaultAdapter.class);
static String Charset_UTF8="UTF-8";
ServiceResponseBuilder serviceResponseBuilder;
@Override
public ModelAndView authorize(UserInfo userInfo, Object app, String data, ModelAndView modelAndView) {
public ModelAndView authorize(ModelAndView modelAndView) {
return null;
return modelAndView;
}
public String base64Attr(String attrValue){
@@ -48,8 +52,12 @@ public class CasDefaultAdapter extends AbstractAuthorizeAdapter {
}
@Override
public String generateInfo(SigninPrincipal authentication,UserInfo userInfo, Object serviceResponseObject) {
ServiceResponseBuilder serviceResponseBuilder=(ServiceResponseBuilder)serviceResponseObject;
public Object generateInfo() {
//user for return
String user = getValueByUserAttr(userInfo,((AppsCasDetails)this.app).getCasUser());
_logger.debug("cas user {}",user);
serviceResponseBuilder.success().setUser(user);
//for user
serviceResponseBuilder.setAttribute("uid", userInfo.getId());
serviceResponseBuilder.setAttribute("displayName", base64Attr(userInfo.getDisplayName()));
@@ -69,7 +77,11 @@ public class CasDefaultAdapter extends AbstractAuthorizeAdapter {
serviceResponseBuilder.setAttribute("institution", userInfo.getInstId());
serviceResponseBuilder.setAttribute(WebConstants.ONLINE_TICKET_NAME,authentication.getOnlineTicket().getTicketId());
return null;
return serviceResponseBuilder;
}
public void setServiceResponseBuilder(ServiceResponseBuilder serviceResponseBuilder) {
this.serviceResponseBuilder = serviceResponseBuilder;
}
}

View File

@@ -53,15 +53,15 @@ public class RedisTicketServices extends RandomServiceTicketServices {
@Override
public void store(String ticketId, Ticket ticket) {
RedisConnection conn=connectionFactory.getConnection();
conn.setexObject(PREFIX+ticketId, serviceTicketValiditySeconds, ticket);
conn.setexObject(prefixTicketId(ticketId), serviceTicketValiditySeconds, ticket);
conn.close();
}
@Override
public Ticket remove(String ticketId) {
RedisConnection conn=connectionFactory.getConnection();
Ticket ticket = conn.getObject(PREFIX+ticketId);
conn.delete(PREFIX+ticketId);
Ticket ticket = conn.getObject(prefixTicketId(ticketId));
conn.delete(prefixTicketId(ticketId));
conn.close();
return ticket;
}
@@ -69,10 +69,14 @@ public class RedisTicketServices extends RandomServiceTicketServices {
@Override
public Ticket get(String ticketId) {
RedisConnection conn=connectionFactory.getConnection();
Ticket ticket = conn.getObject(PREFIX+ticketId);
Ticket ticket = conn.getObject(prefixTicketId(ticketId));
conn.close();
return ticket;
}
public String prefixTicketId(String ticketId) {
return PREFIX + ticketId;
}
}