if(needCredential)
logger.debug("Credential is required.");
logger.debug("Current ACL:{}", needCheck ? acl : "");
}
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
if(needCredential && authentication == null){
logger.error("Session timeout.");
throw new BusinessException(PreserveErrorCode.SESSION_TIMEOUT);
}
if(needCheck){
BaseProfileAction act = (BaseProfileAction)action;
LoxiaUserDetails userDetails = (LoxiaUserDetails)authentication.getPrincipal();
logger.debug("Current Principal:" + userDetails);
String entryAcl = act.getAcl();
if(entryAcl != null){
userDetails.setCurrentOu(null);
logger.debug("Function Entrance... Organization need to repick");
for(GrantedAuthority auth: userDetails.getAuthorities()){
LoxiaGrantedAuthority lauth = (LoxiaGrantedAuthority)auth;
if(lauth.getAuthority().equals(entryAcl)){
userDetails.setCurrentAuthority(lauth);
break;
}
}
if(userDetails.getCurrentAuthority() == null ||
userDetails.getCurrentAuthority().getOuIds().size() == 0){
logger.error("No sufficicent privilege.");
throw new BusinessException(PreserveErrorCode.NO_SUFFICICENT_PRIVILEGE);
}else{
if(userDetails.getCurrentAuthority().
getOuIds().size() == 1){
userDetails.setCurrentOu(operatingUnitDao.getByPrimaryKey(
userDetails.getCurrentAuthority().getOuIds().iterator().next()));
}else{
logger.debug("Redirect Invocation");
String url = request.getRequestURI();
Enumeration<String> paramNames = request.getParameterNames();
StringBuffer paramsSb = new StringBuffer();
while (paramNames.hasMoreElements()) {
String name = (String) paramNames.nextElement();
if (!"acl".equalsIgnoreCase(name)){
paramsSb.append(name + "=" + request.getParameter(name) + "&");
}
}
if (paramsSb.length() > 0){
paramsSb.deleteCharAt(paramsSb.length()-1);
url = url + "?" + paramsSb.toString();
}
request.getSession().setAttribute(BaseAction.FOLLOWING_URL_AFTER_OPERATING_UNIT_PICKUP, url);
response.sendRedirect(request.getContextPath() + "/operatingunitpickup.do");
return null;
}
}
}else{
if(act.getSelectedOuId() != null){
//set Current OperatingUint in up
userDetails.setCurrentOu(operatingUnitDao.getByPrimaryKey(act.getSelectedOuId()));
}else{
if(!userDetails.checkAuthority(acl.value())){
logger.error("No sufficicent privilege.");
throw new BusinessException(PreserveErrorCode.NO_SUFFICICENT_PRIVILEGE);
}
}
}
}
if(authentication != null && authentication.getPrincipal()instanceof LoxiaUserDetails){
LoxiaUserDetails userDetails = (LoxiaUserDetails)authentication.getPrincipal();
if(action instanceof LoxiaUserDetailsAware){
LoxiaUserDetailsAware aware = (LoxiaUserDetailsAware)action;
aware.setLoxiaUserDetails(userDetails);
}
if(userDetails.getCurrentOu() == null){