龙空技术网

cas单点登录自定义登录验证

菜鸡小白 213

前言:

今天朋友们对“tomcat连接数据库做登录”都比较关注,看官们都需要学习一些“tomcat连接数据库做登录”的相关文章。那么小编同时在网摘上网罗了一些关于“tomcat连接数据库做登录””的相关文章,希望兄弟们能喜欢,咱们一起来了解一下吧!

前面我们讲解了cas的简单连接数据库以及简单的加密,可是有时候我们的登录可能不是cas原有的逻辑,我们就必须要重新cas的登录验证以到达自己想要的效果,好在cas提供这些东西给我们自己重写。但是在重写这些之前,需要了解一下几个注解以及一个配置文件

注解:@Configuration、@EnableConfigurationProperties(CasConfigurationProperties.class)(这个是重写一些东西必须得加上的)。

配置文件

就是在resources新建一个mata-inf的文件夹,然后新建一个交spring.factories的文件。这里面存放的就是我们要放置的类(具体可以查看一下官方文档)。

下面正式开始我们的自定义登录验证的第一步。我们需要继承某些类,其实cas

已经帮我弄好了一些抽象类,比如AbstractUsernamePasswordAuthenticationHandler,或者是jdbc的认证,其实这些我们都可以自己继承然后重写。我们这边就用AbstractUsernamePasswordAuthenticationHandler这个作为例子把:

public class Login extends AbstractUsernamePasswordAuthenticationHandler {	 private static final org.slf4j.Logger LOGGER =LoggerFactory.getLogger(Login.class);		public Login(String name, ServicesManager servicesManager, PrincipalFactory principalFactory,			Integer order) {		super(name, servicesManager, principalFactory, order);		// TODO Auto-generated constructor stub	}//	private final String sql="select password from sec_user where username=?";	private String sql="select * from sec_user where username=?";		@Override	protected HandlerResult authenticateUsernamePasswordInternal(UsernamePasswordCredential transformedCredential,			String originalPassword) throws GeneralSecurityException, PreventedException {		// TODO Auto-generated method stub		DriverManagerDataSource d=new DriverManagerDataSource();		d.setDriverClassName("com.mysql.jdbc.Driver");		d.setUrl("jdbc:mysql://127.0.0.1:3306/test");		d.setUsername("root");		d.setPassword("root");		JdbcTemplate template=new JdbcTemplate();		template.setDataSource(d);										String username=transformedCredential.getUsername();		String pd=transformedCredential.getPassword();//		//查询数据库加密的的密码		UserInfo user=template.queryForObject(sql, new Object[]{username}, new BeanPropertyRowMapper<UserInfo>(UserInfo.class));				//		if(sqlpd.equals(pd)){//			return createHandlerResult(transformedCredential, principalFactory.createPrincipal(username, null), null);//		}		if(user==null){			throw new FailedLoginException("没有该用户");		}		//返回多属性		Map<String, Object> map=new HashMap<>();		map.put("email", user.getEmail().toString());		map.put("status", user.getStatus().toString());		LOGGER.info(map.get("email").toString());		LOGGER.info("++++++++++++++++++++zjzjzjz",map);				if(PasswordUtil.decodePassword(user.getPassword(), pd, username)){			return createHandlerResult(transformedCredential, principalFactory.createPrincipal(username, map), null);		}		throw new FailedLoginException("Sorry, login attemp failed.");//		return null;	}}

上面就完成了一个自定义登陆验证的以及返回多属性的问题。但是完成这个不等于我们自定义成功,接下来还需要将这个给注册进去,其代码如下:

@Configuration("MyAuthenticationConfiguration")@EnableConfigurationProperties(CasConfigurationProperties.class)public class MyAuthenticationConfiguration implements AuthenticationEventExecutionPlanConfigurer {	@Autowired private CasConfigurationProperties casProperties; @Autowired @Qualifier("servicesManager") private ServicesManager servicesManager; @Bean public AuthenticationHandler myAuthenticationHandler() { final Login handler = new Login(Login.class.getSimpleName(), servicesManager, new DefaultPrincipalFactory(), 10); return handler; }		@Override	public void configureAuthenticationExecutionPlan(AuthenticationEventExecutionPlan plan) {		// TODO Auto-generated method stub		plan.registerAuthenticationHandler(myAuthenticationHandler());	}}

最后在配置文件里面加上这个注册类的具体路径以及类名:org.springframework.boot.autoconfigure.EnableAutoConfiguration=

com.zj.cas.MyAuthenticationConfiguration。

这时候就完成自定义登录验证。然后重新编译并且打包,然后放到tomcat里面运行,这个时候登录的逻辑就是你自己的自定义逻辑。

标签: #tomcat连接数据库做登录 #cas单点登录认证 #cas登录号查询