java网易云信怎么用_网易云信Web IM入门(二)

一.官方Web IM的demo修改

1.1 修改config.js的appkey

打开项目,找到webdemo->im->js->config.js->online代码片段->修改appkey(换成你自己的应用的App key) 如图

50cac4fd7ba00d8107d99b20484df7c4.png

2.1 修改login.js的requestLogin方法

requestLogin: function(account, pwd) {        $.ajax({            type: 'POST',            url: "http://localhost:8080/school/im",//通过账号密码得到用户信息的链接(或许这里会有一个跨域问题,稍后讲解)            data: JSON.stringify({//一定要看最后的跨域问题,因为Web IM的demo用的是8182端口username:account ,//而我们的Java web项目用的别的端口,如8080,这就会造成跨域,403错误password:pwd,}),contentType: "application/json; charset=utf-8",dataType: "json",}).then((res)=>{console.log('res', res)setCookie('uid',res.data.IMusername);//你的应用中IM功能中保存的用户名setCookie('sdktoken',res.data.token);//该用户名对应的token,身份令牌window.location.href = './main.html';});},

二.Java web demo的创建

2.1 工具,项目准备,我用的是myeclipse2017创建的spring boot项目,用到了spring boot,spring data-jpa,mysql。

2.2 用户实体类 User.java(省略了无参和有参构造方法以及get,set方法)

import javax.persistence.Entity;import javax.persistence.GeneratedValue;import javax.persistence.Id;import javax.persistence.Table;import java.io.Serializable;@Entity@Table(name = "tb_user")public class User implements Serializable{    @Id    @GeneratedValue    private int id;    private String username;//你自己项目的账户名    private String IMusername;//IM账户名,用作Web IM的demo的真正的登录账户,也可以把自己项目的账户和IM账户结合    private String password;//你自己项目的账户密码    private String token;//该IM账户对应的token,相当于使用密码。}

2.3 公共返回数据类 Result.java(省略了无参和有参构造方法以及get,set方法)

import java.io.Serializable;public class Result implements Serializable {    /** 错误码. */    private Integer code    /** 提示信息. */    private String msg;    /** 具体的内容. */    private T data;

}

2.4 公共返回数据处理工具类 ResultUtil.java(为了方便只写了成功的方法,若是后期需要可以自己定义)

import java.util.List;public class ResultUtil{    public static Result success(Object object) {    Result result = new Result();        result.setCode(0);        result.setMsg("成功");        result.setData(object);        return result;    }

}

2.5 UserController.java(为了方便省去了UserService和UserServiceImpl,读者真要做项目,万不可这样)

import org.springframework.beans.factory.annotation.Autowired;import org.springframework.web.bind.annotation.RequestBody;import org.springframework.web.bind.annotation.RequestMapping;import org.springframework.web.bind.annotation.RequestMethod;import org.springframework.web.bind.annotation.RestController;@RequestMapping("school")@RestControllerpublic class UserController {    @Autowired    private UserDao userDao;    @RequestMapping(value = "/im", method = RequestMethod.POST)    public Result selectUser(@RequestBody User user){   User users = userDao.findByUsernameAndPassword(user.getUsername(), user.getPassword());   return ResultUtil.success(users);    }

}

2.6 UserDao.java(因为使用了spring data-jpa,所以只需要写接口,不需要写实现类)

import org.springframework.data.jpa.repository.JpaRepository;import org.springframework.data.jpa.repository.JpaSpecificationExecutor;public interface UserDao extends JpaRepository, JpaSpecificationExecutor{public User findByUsernameAndPassword(String username, String password);

}

2.7 Postman测试

e0dffb60c886218da9cacd1d22d83a95.png

返回json串:我在我的应用IM功能中创建的账户为malimig,username是java web项目登录用的,IMusername登录Web IM

{    "code": 0,    "msg": "成功",    "data": {        "id": 1,        "username": "maliming",        "token": "该账户对应的token",        "password": "mlmmlm",        "IMusername": "maliming"    }

}

三.解决跨域问题(方式有两种,jsonp;cors,这里采用cors,jsonp只支持get请求,且麻烦)

3.1 在Web IM的demo中官方做了node.js的跨域处理,所以我们不去动它,在app.js中,可以看看。

3.2 首先我们做到跨域是想让Web IM的demo访问我们的Java web项目,也就是8182端口可以访问其他的端口。所以我们需要处理每次请求的请求头的信息,这样的话我们就写一个过滤器,这里使用注解注册的过滤器,其他项目按你们原来的形式就可以。

import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.annotation.WebFilter;import javax.servlet.http.HttpServletResponse;@WebFilter(filterName="MyFilter",urlPatterns="/*")public class MyFilter implements Filter{@Overridepublic void init(FilterConfig filterConfig) throws ServletException {}@Overridepublic void doFilter(ServletRequest req, ServletResponse resp, FilterChain chain)throws IOException, ServletException { HttpServletResponse response = (HttpServletResponse)resp;   //*号设置任意端口都可访问,也可指定端口如http://localhost:8182  response.setHeader("Access-Control-Allow-Origin", "*");  //设置"POST, GET, OPTIONS, DELETE"请求才可以访问  response.setHeader("Access-Control-Allow-Methods", "POST, GET, OPTIONS, DELETE");    response.setHeader("Access-Control-Allow-Headers","x-requested-with,content-type");              chain.doFilter(req, resp);}@Overridepublic void destroy() {}

}

3.3 在spring boot项目的入口加上@ServletComponentScan注解,如:

import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import org.springframework.boot.web.servlet.ServletComponentScan;@SpringBootApplication@ServletComponentScanpublic class DemoApplication {public static void main(String[] args) {SpringApplication.run(DemoApplication.class, args);}}

致此,你就可以去Web IM的demo登录自己Java web项目中的用户了,我自己的成功案例图片

6e2690c53c8f2fea227da3a8b5157455.png

若是哪里有理解错误的或写错的地方,望各位读者评论或者私信指正,不胜感激。


版权声明:本文为weixin_39827905原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。