/** * 移动单点登录认证接口,包括两个方法: * <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作为身份认证服务器的实现代码,其中用户名和密码是必传参数。