SpringSocial业务系统与社交网站的绑定与解绑
SpringSocial提供了了以下三个服务,我们要做的仅仅是调用它们的服务,但是SpringSocial仅仅只提供了数据,没有提供视图
⒈拿到所有社交网站与业务系统的绑定信息
SpringSocial已经提供了相应的数据,但并没有提供视图,相关的代码写在ConnectController中,核心代码如下:
@RequestMapping(
method = {RequestMethod.GET}
)
public String connectionStatus(NativeWebRequest request, Model model) {
this.setNoCache(request);
this.processFlash(request, model);
Map<String, List<Connection<?>>> connections = this.connectionRepository.findAllConnections();
model.addAttribute("providerIds", this.connectionFactoryLocator.registeredProviderIds());
model.addAttribute("connectionMap", connections);
return this.connectView();
}
这个方法的返回值是一个View,路径是connect/status,我们只需要实现这个视图就可以了。
package cn.coreqi.social; import com.fasterxml.jackson.databind.ObjectMapper;
import org.apache.commons.collections4.CollectionUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.social.connect.Connection;
import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.AbstractView; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.HashMap;
import java.util.List;
import java.util.Map; @Component("connect/status")
public class CoreqiConnectionStatusView extends AbstractView { @Autowired
private ObjectMapper objectMapper;
@Override
protected void renderMergedOutputModel(Map<String, Object> map, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
Map<String, List<Connection<?>>> connections = (Map<String, List<Connection<?>>>) map.get("connectionMap");
Map<String,Boolean> result = new HashMap<>();
for(String key:connections.keySet()){
result.put(key, CollectionUtils.isNotEmpty(connections.get(key)));
}
httpServletResponse.setContentType("application/json;charset=UTF-8");
httpServletResponse.getWriter().write(objectMapper.writeValueAsString(result));
}
}
⒉业务系统与社交网站绑定
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>绑定</title>
</head>
<body>
<h2>标准绑定页面</h2>
<!--form 的action地址是固定的格式,前面是connect,后面是OAuth的providerId-->
<form action="/connect/weixin" method="post">
<button type="submit">绑定微信</button>
</form>
</body>
</html>
绑定成功后跳转到connect/{providerId}Connected这个视图,上面的例子将会跳转到connect/weixinConnected这个视图上。
package cn.coreqi.social; import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.AbstractView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map; @Component("connect/weixinConnect,connect/weixinConnected") //如果当前绑定成功的视图需要重用,请注释@Component注解
//在配置类中以@Bean的形式注册当前类,并指定多个不同的name属性。
public class CoreqiConnectionView extends AbstractView { @Override
protected void renderMergedOutputModel(Map<String, Object> map, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
httpServletResponse.setContentType("text/html;charset=UTF-8");
if(map.get("connection") == null){
httpServletResponse.getWriter().write("<h3>解绑成功</h3>");
}else{
httpServletResponse.getWriter().write("<h3>绑定成功</h3>");
}
}
}
⒊业务系统与社交网站解绑
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>绑定</title>
</head>
<body>
<h2>标准绑定页面</h2>
<!--form 的action地址是固定的格式,前面是connect,后面是OAuth的providerId-->
<!--解除绑定只需将post请求改为delete请求,当然,form表单是无法发送delete请求的,我只是告诉你-->
<form action="/connect/weixin" method="delete">
<button type="submit">绑定微信</button>
</form>
</body>
</html>
解绑成功后跳转到connect/{providerId}Connect这个视图(相较于绑定,视图名去掉了ed而已),上面的例子将会跳转到connect/weixinConnect这个视图上。
package cn.coreqi.social; import org.springframework.stereotype.Component;
import org.springframework.web.servlet.view.AbstractView;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.util.Map; @Component("connect/weixinConnect,connect/weixinConnected") //如果当前绑定成功的视图需要重用,请注释@Component注解
//在配置类中以@Bean的形式注册当前类,并指定多个不同的name属性。
public class CoreqiConnectionView extends AbstractView { @Override
protected void renderMergedOutputModel(Map<String, Object> map, HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse) throws Exception {
httpServletResponse.setContentType("text/html;charset=UTF-8");
if(map.get("connection") == null){
httpServletResponse.getWriter().write("<h3>解绑成功</h3>");
}else{
httpServletResponse.getWriter().write("<h3>绑定成功</h3>");
}
}
}
SpringSocial业务系统与社交网站的绑定与解绑的更多相关文章
- Service的启动与停止、绑定与解绑
---恢复内容开始--- Service的意义就在于当软件停止之后还可以在背景中进行运行,换句话也就是说,比如一个音乐播放器,当我们退出音乐播放器的时候,还是希望它在背景中运行,也就是一直播放着音乐, ...
- React事件绑定与解绑
React中事件分类 React中事件绑定分为两种: 1.直接添加在React元素上的事件,这是React在基于Virtual DOM的基础上实现的符合w3c规范的合成事件(SyntheticEven ...
- 兼容8事件绑定与解绑addEventListener、removeEventListener和ie的attachEvent、detachEvent
兼容8事件绑定与解绑addEventListener.removeEventListener和ie的attachEvent.detachEvent ;(function(){ // 事件绑定 bi ...
- jQuery事件绑定、解绑、命名空间
jQuery事件绑定.解绑.命名空间 <%@ page language="java" import="java.util.*" pageEncoding ...
- 使用JavaScript动态的绑定、解绑 a 标签的onclick事件,防止重复点击
页面上的 a 标签如下: <a class="more" style="cursor: pointer;" id="commentMore&qu ...
- jquery中的DOM事件绑定与解绑
在jquery事件中有时候有的事件只需要在绑定后有效触发一次,当通过e.target判断触发条件有效触发后解除绑定事件,来避免多次无效触发和与未知情况造成冲突. 这时候就要用到了jquery中的事件绑 ...
- jquery中事件重复绑定以及解绑问题
一般的情况下,对于这种情况,我们常规的思路是,先解绑,再绑定,如下: $(selector).unbind('click').bind('click',function(){....}); 当这样会有 ...
- jQuery事件绑定,解绑,触发
事件绑定 1.bind(type,[data],fn) --type: 含有一个或多个事件类型的字符串,由空格分隔多个事件.比如"click"或"submit" ...
- jQuery 学习笔记(5)(事件绑定与解绑、事件冒泡与事件默认行为、事件的自动触发、自定义事件、事件命名空间、事件委托、移入移出事件)
1.事件绑定: .eventName(fn) //编码效率略高,但部分事件jQuery没有实现 .on(eventName, fn) //编码效率略低,所有事件均可以添加 注意点:可以同时添加多个相同 ...
随机推荐
- 物理服务器Linux下软RAID和UUID方式挂载方法--Megacli64
一.业务部门需求说明:公司最近来了一批服务器,用于大数据业务部署.数据节点服务器由14块物理磁盘,其中有2块是900G的盘,12块是4T的盘.在服务器系统安装时,进入系统的BIOS界面:1)将2块90 ...
- bzoj2938 AC自动机 + 拓扑排序找环
https://www.lydsy.com/JudgeOnline/problem.php?id=2938 题意:给出N个01病毒序列,询问是否存在一个无限长的串不存在病毒序列 正常来说,想要寻找一个 ...
- python中import问题
https://blog.csdn.net/aspenstars/article/details/69605318 Python包含子目录中的模块方法比较简单,关键是能够在sys.path里面找到通向 ...
- systemd 编写
转载文章:http://www.ruanyifeng.com/blog/2016/03/systemd-tutorial-part-two.html https://wizardforcel.gitb ...
- 14、JDBC-DbUtils-API
DbUtils /** * DbUtils :提供如关闭连接.装载 JDBC 驱动等操作的工具类,里面方法都是静态的. * * public static void close(…) throws j ...
- 8.装饰模式(Decorator Pattern)
子类复子类,子类何其多 假如我们需要为游戏中开发一种坦克,除了各种不同型号的坦克外,我们还希望在不同场合中为其增加以下一种或多种功能;比如红外线夜视功能,比如水陆两栖功能,比如卫星定位功能等等.按类继 ...
- layui(五)——form组件常见用法总结
form 是我们非常看重的一块.layui中的form实现全自动的初始渲染,和基于事件驱动的接口书写方式.我整理了layui中form的配置.下边直接给一个栗子,后台采用.net MVC,除了razo ...
- [leetcode-117]填充每个节点的下一个右侧节点指针 II
(1 AC) 填充每个节点的下一个右侧节点指针 I是完美二叉树.这个是任意二叉树 给定一个二叉树 struct Node { int val; Node *left; Node *right; Nod ...
- cdqz2017-test1-数论 (BSGS + 二次剩余 + CRT)
若m=0, 就是求n^2n ≡ x mod p (x--) 因为一定优解,所以x一定是p的二次剩余 令g为p的1个原根,且g^k ≡ x mod p 则k是偶数,证明k是偶数: 假设 g1^k1 ≡ ...
- js监听键盘事件
用JS监听键盘按下事件(keydown event) 1.监听全局键盘按下事件,例如监听全局回车事件 1 $(document).keydown(function(event){ 2 if(eve ...