单点登录之实战CAS5.1.x(四) ——自定义验证类
2017-09-18 11:19
351 查看
摘要: 自定义验证类
前面提到了2个伏笔,一个是域验证获取不到详细信息,一个是MS SQL Server无法配置认证源,这两个问题都可以藉由自定义验证类来实现,同时使用自定义的认证类可以满足一些比较复杂的业务需求。
官方有一篇博客介绍了具体的做法:https://apereo.github.io/2017/02/02/cas51-authn-handlers/,稍微有一些简略,中间有些关键的东西可能会卡住。
首先建立一个空的java类库项目,引入cas的依赖,我偷懒就干脆把整个war包里100多个都引进来了,反正也不会打包打进去的对吧……
1 建立自己的验证类,cas有不少现成的验证类可以继承,我推荐继承官方博客里的AbstractUsernamePasswordAuthenticationHandler。
2 在authenticateUsernamePasswordInternal方法里写你自己的验证逻辑,这里正是我们大显身手的地方,域验证、抓取域信息、连接MSSQL数据库?统统不在话下。
3 返回成功凭证时不要忘了带上详细信息:
return createHandlerResult(upc, principalFactory.createPrincipal(upc.getUsername(), propMap), null);
这里的propMap就是Java客户端可以拿到的详细信息了,DotNet是拿不到的,大家可以变通一下把用户名变成详细信息这样返回:
return createHandlerResult(upc, principalFactory.createPrincipal(base64(propMap), propMap), null);
4 建立自己的Configuration类,继承AuthenticationEventExecutionPlanConfigurer。
5 在META-INF文件夹下建立一个spring.factories文件,写入:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.custom.cas.MyAuthenticationConfiguration
6 打包并放入webapps下cas的lib目录即可。
坑8:自定义的验证类和在property中配置的验证类不冲突,按优先级依次验证并返回,但是cas似乎不会为自定义验证类做属性合并,就是说如果你在配置中配置了多个源,每个源的属性是可以自动合并的,但自定义验证类则不会,cas对其置之不理,不知道是我没研究好还是哪里配置有问题,已经懒得去研究了……
前面提到了2个伏笔,一个是域验证获取不到详细信息,一个是MS SQL Server无法配置认证源,这两个问题都可以藉由自定义验证类来实现,同时使用自定义的认证类可以满足一些比较复杂的业务需求。
官方有一篇博客介绍了具体的做法:https://apereo.github.io/2017/02/02/cas51-authn-handlers/,稍微有一些简略,中间有些关键的东西可能会卡住。
首先建立一个空的java类库项目,引入cas的依赖,我偷懒就干脆把整个war包里100多个都引进来了,反正也不会打包打进去的对吧……
1 建立自己的验证类,cas有不少现成的验证类可以继承,我推荐继承官方博客里的AbstractUsernamePasswordAuthenticationHandler。
2 在authenticateUsernamePasswordInternal方法里写你自己的验证逻辑,这里正是我们大显身手的地方,域验证、抓取域信息、连接MSSQL数据库?统统不在话下。
@Override protected HandlerResult authenticateUsernamePasswordInternal(final UsernamePasswordCredential upc, final String originalPassword) throws GeneralSecurityException, PreventedException { if (upc.getUsername() == "admin" && upc.getPassword() == "admin") { Map propMap = new HashMap(); propMap.put("addr", "Shanghai"); propMap.put("job", "Engineer"); propMap.put("mobile", "13800000000"); return createHandlerResult(upc, principalFactory.createPrincipal(upc.getUsername(), propMap), null); } throw new FailedLoginException("Sorry, login attemp failed."); }
3 返回成功凭证时不要忘了带上详细信息:
return createHandlerResult(upc, principalFactory.createPrincipal(upc.getUsername(), propMap), null);
这里的propMap就是Java客户端可以拿到的详细信息了,DotNet是拿不到的,大家可以变通一下把用户名变成详细信息这样返回:
return createHandlerResult(upc, principalFactory.createPrincipal(base64(propMap), propMap), null);
4 建立自己的Configuration类,继承AuthenticationEventExecutionPlanConfigurer。
@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 MyAuthenticationHandler handler = new MyAuthenticationHandler(MyAuthenticationHandler.class.getSimpleName(), servicesManager, new DefaultPrincipalFactory(), 10); return handler; } @Override public void configureAuthenticationExecutionPlan(final AuthenticationEventExecutionPlan plan) { plan.registerAuthenticationHandler(myAuthenticationHandler()); } }
5 在META-INF文件夹下建立一个spring.factories文件,写入:
org.springframework.boot.autoconfigure.EnableAutoConfiguration=com.custom.cas.MyAuthenticationConfiguration
6 打包并放入webapps下cas的lib目录即可。
坑8:自定义的验证类和在property中配置的验证类不冲突,按优先级依次验证并返回,但是cas似乎不会为自定义验证类做属性合并,就是说如果你在配置中配置了多个源,每个源的属性是可以自动合并的,但自定义验证类则不会,cas对其置之不理,不知道是我没研究好还是哪里配置有问题,已经懒得去研究了……
相关文章推荐
- 单点登录(十五)-----实战-----cas4.2.x登录mongodb验证方式实现自定义加密
- 单点登录(十五)-----实战-----cas4.2.x登录mongodb验证方式实现自定义加密
- 自定义Django中间件(登录验证中间件实例)
- 【WEB API项目实战干货系列】- API登录与身份验证(三)
- Asp.Net Forms验证(自定义、角色提供程序、单点登录)
- Vue实战之vue登录验证的实现代码
- Spring Security 入门(3-11)Spring Security 的使用-自定义登录验证和回调地址
- 修改cas-server(三),自定义登录验证方式。
- Android实战简易教程-第三十二枪(自定义View登录注册界面EditText-实现一键清空)
- CAS自定义登录验证
- asp.net MVC中如何用Membership类和自定义的数据库进行登录验证
- 单点登录CAS使用记(三):实现自定义验证用户登录
- Spring Security教程(10)---- 自定义登录成功后的处理程序及修改默认验证地址
- 自定义jQuery.validator 验证框架,登录验证以及自定义的正则表达式验证
- CAS框架单点登录,自定义验证登录方式(添加系统标识)
- 单点登录之实战CAS5.1.x(二)——配置认证源
- 自定义jQuery.validator 验证框架,登录验证以及自定义的正则表达式验证
- Django自定义User模型和登录验证
- 单点登录之实战CAS5.1.x(一)——安装