3.27.4.2.2. OA服务器实现Ticket单点登录接口

接口定义如下:

/**
 * @author wangx
 * @since JDK 1.5
 * @version 1.0
 */
public interface ICMPSSOValidation {
    /**
     * 验证ticket有效性
     * @param request
     * @param response
     * @return 验证成功返用户名,验证失败返回null
     */
    public String validate(HttpServletRequest request, HttpServletResponse response);

接口实现如下:

/**
 * @author wangx
 * @since JDK 1.5
 * @version 1.0
 */
public class CMPTicketCASValidation implements ICMPSSOValidation {
    private static final Logger log = Logger.getLogger(CMPTicketCASValidation.class);
    private static final ObjectMapper mapper = new ObjectMapper();
    private String serverUrl;
    private String serviceUrl;
    private CMPForCASRESTfulServices services;
    
    public CMPTicketCASValidation() {
        this.services = CMPForCASRESTfulServices.getInstance();
    }

    @Override
    public String validate(HttpServletRequest request, HttpServletResponse response) {
        String ticket = request.getParameter(CMPAuthenticationContants.TICKET);

        String result = null;
        try {
            String v = services.validateByTGT(serverUrl, ticket, serviceUrl);
            CMPReceivingTicketValidationResult t = mapper.readValue(v, CMPReceivingTicketValidationResult.class);
            if(t.isSuccess()) {
                result = t.getUsername();
            }
        } catch (Exception e) {
            log.info("Invalid ticket,authentication failed!ticket=" + ticket, e);
        }
        return result;
    }

    public String getServerUrl() {
        return serverUrl;
    }

    public void setServerUrl(String serverUrl) {
        this.serverUrl = serverUrl;
    }

    public String getServiceUrl() {
        return serviceUrl;
    }

    public void setServiceUrl(String serviceUrl) {
        this.serviceUrl = serviceUrl;
    }
}