5、接2.md_CAS从服务端的获取参数多行
2018-03-13 21:42
134 查看
前言
1、人无完人,谁都会犯错,我犯的错误就是在文档2018-03-11-2_MD5-加盐校验-自定义密码校验-rest密码校验-客户端登录具体参数
关于返回的具体参数还缺少一部分内容。而且正好上一节做了第三方登录。也是获取具体参数的,更加详细。这个时候的代码我们还是利用 4、中的代码继续。如果朋友们有需要可以自己将本代码的内容整合到2中。
1.1、获取更多的参数-多行
也就是说返回一个类似于一个name为school,但是它里面包含很多其他的值,比如包含,大连工业大学,清华大学,北京大学1、创建多行数据库表和之前的
sys_user_rest_salt
表进行关联
-- 这个具体的返回,我还是按照之前rest随机盐查询的数据库开始, -- 也就是说主用户表依旧是sys_user_rest_salt,根据主表中的邮箱确定本从表sys_user_rest_salt_attrs /* * 用户属性表 */ CREATE TABLE sys_user_rest_salt_attrs ( EMAIL VARCHAR(100) NOT NULL, ATTR_KEY VARCHAR(50) NOT NULL, ATTR_VAL VARCHAR(100) NOT NULL ); # ---用户属性表 INSERT INTO sys_user_rest_salt_attrs VALUES ('mxzdhealer@gmail.com', 'group', '软件研究所'); INSERT INTO sys_user_rest_salt_attrs VALUES ('mxzdhealer@gmail.com', 'group', '计算机132'); INSERT INTO sys_user_rest_salt_attrs VALUES ('mxzdhealer@gmail.com', 'school', '大连工业大学'); INSERT INTO sys_user_rest_salt_attrs VALUES ('mxzdhealer@gmail.com', 'school', '北京大学'); INSERT INTO sys_user_rest_salt_attrs VALUES ('mxzdhealer@gmail.com', 'school', '清华大学'); INSERT INTO sys_user_rest_salt_attrs VALUES ('zhangsan@gmail.com', 'group', 'DEV_ROLE');
1.2、通过单行的返回值确定多行
# 6、服务端返回客户端详细的用户信息 cas.authn.attributeRepository.jdbc[0].singleRow=true cas.authn.attributeRepository.jdbc[0].order=0 cas.authn.attributeRepository.jdbc[0].url=jdbc:mysql://localhost:3306/casnew?allowMultiQueries=true&zeroDateTimeBehavior=convertToNull cas.authn.attributeRepository.jdbc[0].user=root cas.authn.attributeRepository.jdbc[0].password=123456 #username 返回登录的时候的提供的用户名,配置为和数据库一致,观察ddkj即可发现这里配置的为email,主要看登录的是什么,也就是查询条件 cas.authn.attributeRepository.jdbc[0].username=email #使用邮箱登录的 cas.authn.attributeRepository.jdbc[0].sql=select * from sys_user_rest_salt where email=? # 下面这里为配置要返回的信息,要返回的信息为email,address cas.authn.attributeRepository.jdbc[0].attributes.id=id cas.authn.attributeRepository.jdbc[0].attributes.email=email cas.authn.attributeRepository.jdbc[0].attributes.address=address cas.authn.attributeRepository.jdbc[0].dialect=org.hibernate.dialect.MySQL5Dialect cas.authn.attributeRepository.jdbc[0].ddlAuto=none cas.authn.attributeRepository.jdbc[0].driverClass=com.mysql.jdbc.Driver cas.authn.attributeRepository.jdbc[0].leakThreshold=10 cas.authn.attributeRepository.jdbc[0].propagationBehaviorName=PROPAGATION_REQUIRED cas.authn.attributeRepository.jdbc[0].batchSize=1 cas.authn.attributeRepository.jdbc[0].healthQuery=SELECT 1 cas.authn.attributeRepository.jdbc[0].failFast=true # 后来补充的,6.2、根据上面的单行,生成下面的多行 cas.authn.attributeRepository.jdbc[1].singleRow=false cas.authn.attributeRepository.jdbc[1].order=0 cas.authn.attributeRepository.jdbc[1].url=jdbc:mysql://localhost:3306/casnew?allowMultiQueries=true&zeroDateTimeBehavior=convertToNull cas.authn.attributeRepository.jdbc[1].user=root cas.authn.attributeRepository.jdbc[1].password=123456 #username 返回登录的时候的提供的用户名,配置为和数据库一致,观察ddkj即可发现这里配置的为email # ,主要看登录的是什么,从网上理解也就是查询条件,不太懂,反正理解成登录什么就是什么吧。没错 cas.authn.attributeRepository.jdbc[1].username=email #使用邮箱登录的 cas.authn.attributeRepository.jdbc[1].sql=select * from sys_user_rest_salt_attrs where email=? #多行,返回的多行名字,确定数据中的字段是,attributes.group、school cas.authn.attributeRepository.jdbc[1].attributes.group=group_multi cas.authn.attributeRepository.jdbc[1].attributes.school=school_multi #键值对 cas.authn.attributeRepository.jdbc[1].columnMappings.ATTR_KEY=ATTR_VAL cas.authn.attributeRepository.jdbc[1].dialect=org.hibernate.dialect.MySQL5Dialect cas.authn.attributeRepository.jdbc[1].ddlAuto=none cas.authn.attributeRepository.jdbc[1].driverClass=com.mysql.jdbc.Driver cas.authn.attributeRepository.jdbc[1].leakThreshold=10 cas.authn.attributeRepository.jdbc[1].propagationBehaviorName=PROPAGATION_REQUIRED cas.authn.attributeRepository.jdbc[1].batchSize=1 cas.authn.attributeRepository.jdbc[1].healthQuery=SELECT 1 cas.authn.attributeRepository.jdbc[1].failFast=true
1.3、使用第三方登录的工程sso-client-pac4j登录测试
方法也一样,只不过请求的url名字变了而已变成了limitGetAttribute1、启动
sso-server 8443
sso-server-rest 8888
sso-server-pac4j 8003
@GetMapping("limitGetAttribute") @ResponseBody public String limitGetAttribute(HttpServletRequest request){ if (request.getUserPrincipal() != null) { AttributePrincipal principal = (AttributePrincipal) request.getUserPrincipal(); final Map attributes = principal.getAttributes(); if (attributes != null) { Iterator attributeNames = attributes.keySet().iterator(); if (attributeNames.hasNext()) { for (; attributeNames.hasNext(); ) { String name = (String) attributeNames.next(); System.out.printf("name:"+name+"-------"); final Object attributeValue = attributes.get(name); if (attributeValue instanceof List) { final List values = (List) attributeValue; for (Object value : values) { System.out.printf("value:"+value+"|"); } System.out.printf("|"); } else { System.out.printf(attributeValue.toString()); } System.out.println("------------"); } } else { System.out.println("No attributes are supplied by the CAS server.</p>"); } } else { System.out.println("<pre>The attribute map is empty. Review your CAS filter configurations.</pre>"); } } else { System.out.println("<pre>The user principal is empty from the request object. Review the wrapper filter configuration.</pre>"); } String user3 = AssertionHolder.getAssertion().getPrincipal().getName(); System.out.println("3、AssertionHolder.getAssertion().getPrincipal().getName()"+user3); return "github"; }
2、浏览器请求: http://casclientpac4j:8083/limitGetAttribute 登录成功之后观察客户端控制台
name:group_multi-------value:软件研究所|value:计算机132||------------ name:address-------山西忻州------------ name:isFromNewLogin-------true------------ name:authenticationDate-------2018-03-12T19:14:53.457+08:00[Asia/Shanghai]------------ name:authenticationMethod-------RestAuthenticationHandler------------ name:successfulAuthenticationHandlers-------RestAuthenticationHandler------------ name:school_multi-------value:北京大学|value:清华大学|value:大连工业大学||------------ name:longTermAuthenticationRequestTokenUsed-------false------------ name:id-------1------------ name:email-------mxzdhealer@gmail.com------------ 3、AssertionHolder.getAssertion().getPrincipal().getName()mxzdhealer@gmail.com
2、下载代码
如果满意,请打赏博主任意金额,感兴趣的请下方留言吧。可与博主自由讨论哦支付包 | 微信 | 微信公众号 |
---|---|---|
相关文章推荐
- 【工作记录0022】C#(.NET)调用Java开发的WebService(wsdl),客户端传递非string类型参数(int,double,bool等),而服务端无法获取到参数值的解决方案
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
- restful服务端无法获取post参数的解决方法
- 采用Ajax传递参数加号(+)和与符号(&)时候,服务端获取到的参数并不如意!
- 服务端获取手机客户端的请求路径以及请求参数,拼接成带参数的URL格式
- cas服务端获取登录名
- 采用Ajax传递参数加号(+)和与符号(&)时候,服务端获取到的参数并不如意!
- SpringMVC中使用Ajax POST请求以json格式传递参数服务端通过request.getParameter("name")无法获取参数值问题分析
- 通用JS工具类封装——网络数据请求功能、获取服务端接口 url、参数功能
- cas 服务端返回多用户信息 cas客户端获取不到用户信息的解决
- asp.net mvc 批量保存 服务端获取客户端传进的数组参数的处理方法
- 在html静态页面中获取请求参数和参数值
- CAS单点登陆,URL多出个参数jsessionid导致登陆失败问题
- 获取中文参数乱码的问题
- 用JS获取地址栏参数的方法
- <码农进阶> 解析sql语句中参数名然后根据发射获取对应参数值
- js获取url参数
- 如何获取shell脚本的可选参数
- 通过jquery 获取URL参数并进行转码
- web.xml中在Servlet中获取context-param和init-param内的参数