3.27.3.2.1. 实现单点登录接口

/**
 * 移动单点登录认证接口,包括两个方法:
 * <ol>
 * <li>登录:使用户名和密码进行登录认证,并返回认证的ticket</li>
 * <li>登出:使用ticket进行登录</li>
 * </ol>
 * 
 * @author wangx
 * @since JDK 1.5
 * @version 1.0
 */
public interface ICMPSSOAuthentication {
    /**
     * 根据请求参数进行验证
     * @param request
     * @param response
     * @return 验证成功返回ticket,验证失败返回null
     */
    public String authenticate(HttpServletRequest request, HttpServletResponse response);
    
    /**
     * 登出
     * @param ticket 登录凭证
     * @return true登出成功,false则失败
     */
    public boolean logout(String ticket);
}

说明:需要分别实authentication和logout两个接口,实现实例如下:

    /**
 * 该认证服务器使用的场景如下:
 * <p>
 * 认证服务器采用CAS作为认证服务器
 * </p>
 * @author wangx
 * @since JDK 1.5
 * @version 1.0
 */
public class CMPUsernamePasswordCASAuthentication implements ICMPSSOAuthentication {
    private static final Logger log = Logger.getLogger(CMPUsernamePasswordCASAuthentication.class);
    private String serverUrl;
    private CMPForCASRESTfulServices services;

    @Override
    public String authenticate(HttpServletRequest request, HttpServletResponse response) {
        String username = request.getParameter(LoginConstants.USERNAME);
        String password = request.getParameter(LoginConstants.PASSWORD);
        
        String result = null;
        try {
            result = services.authentication(serverUrl, username, password);
        } catch (Exception e) {
            result = null;
            log.info("CAS authentication failed!", e);
        }
        return result;
    }
    
    @Override
    public boolean logout(String ticket) {
        return services.logout(serverUrl, ticket);
    }

    public String getServerUrl() {
        return serverUrl;
    }

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

    public CMPForCASRESTfulServices getServices() {
        return services;
    }

    public void setServices(CMPForCASRESTfulServices services) {
        this.services = services;
    }

}
实例中的代码是使用CAS作为身份认证服务器的实现代码,其中用户名和密码是必传参数。