Java培训专家—传智播客http://java.itcast.cn
其实,上面的MD5验证,完全可以使用同一个。
上面的程序非常简单,完全可以通过查看源代码和继承结构图来了解认证和登录方式。且不需要书写任何Java代码。
3、增加一个自己的类,接收用户名和密码,且必须要倒序的用户名与密码相同时才可以登录
只是简单的做一个示例,没有具体用途:
package cn.itcast.pubs;
import org.jasig.cas.authentication.handler.AuthenticationException; import org.jasig.cas.authentication.handler.AuthenticationHandler; import org.jasig.cas.authentication.principal.Credentials;
import org.jasig.cas.authentication.principal.UsernamePasswordCredentials; import org.slf4j.Logger;
import org.slf4j.LoggerFactory; /**
* 实现自己的登录验证器 * @author 王健
* @version 1.0 2012-2-18 */
public class MyAuthenticationHandler implements AuthenticationHandler{
Logger log = LoggerFactory.getLogger(MyAuthenticationHandler.class);
Java培训专家—传智播客http://java.itcast.cn Java培训专家—传智播客http://java.itcast.cn }
/** * 只有supports方法返回真的情况下,才会进入此方法进行验证。 */
public boolean authenticate(Credentials credentials) } /**
* 必须要继承supports方法,即是否支持这种凭据 */
public boolean supports(Credentials credentials) { }
boolean boo = credentials.getClass() //验证是否是相同的类 ==UsernamePasswordCredentials.class; boo = boo || //验证是否是某种类的的子类 UsernamePasswordCredentials.class.
isAssignableFrom(credentials.getClass());
log.info(\是否是用户名密码的认证器:\+boo); return boo;
throws AuthenticationException {
UsernamePasswordCredentials cre = //将凭据强转成用户名和密码的凭据 (UsernamePasswordCredentials) credentials; String name = cre.getUsername(); String pwd = cre.getPassword();
//获取用户名 //获取密码
name = new StringBuffer(name).reverse().toString();//反转一个字符串 if(name.equals(pwd)){ }
return false;
log.info(\验证通过:\+name+\+pwd); return true;
将上面的类,也一样配置到元素中:
Java培训专家—传智播客http://java.itcast.cn Java培训专家—传智播客http://java.itcast.cn
8、返回用户的更多信息
1、如返回用户名和用户ID
配置返回用户的ID而不是用户名,用户凭据:Credentials和用户对象(被代理人) :Principal。
Credentials :用于定义用户以什么样的凭据登录,普通的凭据为用户名和密码凭据。
Principal :用户登录成功以后,使用Credentials转换成Principal。Principal中包含了用户的用户名(默认)及一些其他属性信息。
Credentials及Pincipal关系的图示,及Principal内部结构图示:
Principal的源代码如下:(注意此Principal不是java.security.Principal类。而是由cas自己定义的一个接口)
package org.jasig.cas.authentication.principal;
Java培训专家—传智播客http://java.itcast.cn Credentials 用户凭据 通过resolvePrincipal方法转换成 Principal (用户对象,被代理人) String getId() – 返回用户的唯一标识 Map getAttributes() 用户的其他有用信息 Java培训专家—传智播客http://java.itcast.cn import java.io.Serializable; import java.util.Map;
public interface Principal extends Serializable { String getId();
Map
为了可以返回用户的ID,我们可以修改deployerConfigContext.xml文件中的元素中的Bean。 此时,为了可以返回用户的ID,我们必须要手工创建一个CredentialsToPrincipalResolver的子类。
具体代码如下:
package cn.itcast.pubs; import javax.sql.DataSource;
import org.jasig.cas.authentication.principal.Credentials;
import org.jasig.cas.authentication.principal.CredentialsToPrincipalResolver; import org.jasig.cas.authentication.principal.Principal; import org.jasig.cas.authentication.principal.SimplePrincipal;
import org.jasig.cas.authentication.principal.UsernamePasswordCredentials; import org.springframework.jdbc.core.JdbcTemplate;
public class MyCredentialsToPrincipalResolver implements CredentialsToPrincipalResolver {
private DataSource dataSource;//查询数据库用 @Override
public Principal resolvePrincipal(Credentials credentials) {
UsernamePasswordCredentials up = //强制类型转换 (UsernamePasswordCredentials) credentials; String name = up.getUsername(); String pwd = up.getPassword();
String sql = \; //查询id - 一般只根据用户查询即可 String id = null; try{
Java培训专家—传智播客http://java.itcast.cn

