Browse Source

pwd auth

master
tangmingyou 4 years ago
parent
commit
b1864a3264
  1. 9
      im-client/src/main/java/net/sopod/soim/client/net/ImNetClient.java
  2. 58
      im-core/src/main/java/net/sopod/soim/core/session/Account.java
  3. 21
      im-core/src/main/java/net/sopod/soim/core/session/NetUser.java
  4. 17
      im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/UserDasService.java
  5. 2
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/DasUserApplication.java
  6. 7
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/HelloService.java
  7. 27
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/HelloServiceImpl.java
  8. 35
      im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasServiceImpl.java
  9. 8
      im-das/im-das-user/src/main/resources/application.yml
  10. 2
      im-das/im-das-user/src/main/resources/mapper/UserMapper.xml
  11. 35
      im-entry-http/pom.xml
  12. 21
      im-entry-http/src/main/java/net/sopod/soim/entry/http/EntryHttpApplication.java
  13. 32
      im-entry-http/src/main/java/net/sopod/soim/entry/http/controller/AuthController.java
  14. 18
      im-entry-http/src/main/java/net/sopod/soim/entry/http/model/ao/PwdAuthAO.java
  15. 13
      im-entry-http/src/main/java/net/sopod/soim/entry/http/service/ImEntryMonitorService.java
  16. 11
      im-entry-http/src/main/java/net/sopod/soim/entry/http/service/ImEntryService.java
  17. 14
      im-entry-http/src/main/resources/application.yml
  18. 8
      im-entry/src/main/java/net/sopod/soim/entry/handler/HelloHandler.java
  19. 36
      im-entry/src/main/java/net/sopod/soim/entry/handler/auth/LoginHandler.java
  20. 1
      im-entry/src/main/java/net/sopod/soim/entry/server/InboundImMessageHandler.java
  21. 2
      im-entry/src/main/resources/application.yml
  22. 1
      im-logic-api/im-logic-user-api/pom.xml
  23. 9
      im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java
  24. 4
      im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/AuthService.java
  25. 15
      im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserAuthService.java
  26. 33
      im-logic/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java
  27. 6
      pom.xml

9
im-client/src/main/java/net/sopod/soim/client/net/ImNetClient.java

@ -7,6 +7,7 @@ import io.netty.channel.nio.NioEventLoopGroup;
import io.netty.channel.socket.SocketChannel;
import io.netty.channel.socket.nio.NioSocketChannel;
import net.sopod.soim.core.net.ImMessageCodec;
import net.sopod.soim.data.msg.auth.Auth;
import net.sopod.soim.data.msg.hello.HelloPB;
import java.util.HashMap;
@ -42,15 +43,21 @@ public class ImNetClient {
.setId(1)
.setStr("手")
.build();
Auth.Login login = Auth.Login.newBuilder()
.setAccount("prometheus")
.setPassword("123456")
.build();
// ImMessage imMessage = new ImMessage()
// .setServiceNo(ProtoMessageManager.getSerialNo(hello.getClass()))
// .setSerializeType(SerializeType.json.ordinal())
// //.setBody(Jackson.json().serialize(body).getBytes(StandardCharsets.UTF_8));
// .setBody(hello.toByteArray());
channel.writeAndFlush(hello);
Thread.sleep(4000);
channel.writeAndFlush(login);
channel.close();
work.shutdownGracefully();
}
}

58
im-core/src/main/java/net/sopod/soim/core/session/Account.java

@ -1,18 +1,23 @@
package net.sopod.soim.core.session;
import io.netty.channel.Channel;
import io.netty.util.AttributeKey;
import com.google.common.base.Preconditions;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class Account extends NetUser {
public static final AttributeKey<Account> ACCOUNT_KEY = AttributeKey.valueOf(Account.class, "ACCOUNT");
private static final Logger logger = LoggerFactory.getLogger(Account.class);
private long accountId;
// public static final AttributeKey<Account> ACCOUNT_KEY = AttributeKey.valueOf(Account.class, "ACCOUNT");
private String name;
private final long accountId;
public Account(Channel channel) {
super(channel);
private final String name;
Account(NetUser netUser, long accountId, String name) {
super(netUser.channel.get());
this.accountId = accountId;
this.name = name;
}
@Override
@ -20,4 +25,43 @@ public class Account extends NetUser {
return true;
}
@Override
public void upgradeAccount(Account account) {
logger.warn("account can not upgrade as account again!");
}
public long getAccountId() {
return accountId;
}
public String getName() {
return name;
}
public static class AccountBuilder {
private long accountId;
private String name;
private NetUser netUser;
public static AccountBuilder newBuilder() {
return new AccountBuilder();
}
public AccountBuilder setNetUser(NetUser netUser) {
this.netUser = netUser;
return this;
}
public AccountBuilder setAccountId(long accountId) {
this.accountId = accountId;
return this;
}
public AccountBuilder setName(String name) {
this.name = name;
return this;
}
public Account build() {
Preconditions.checkNotNull(netUser);
Preconditions.checkNotNull(name);
return new Account(netUser, accountId, name);
}
}
}

21
im-core/src/main/java/net/sopod/soim/core/session/NetUser.java

@ -4,16 +4,13 @@ import io.netty.channel.Channel;
import io.netty.util.AttributeKey;
import java.lang.ref.WeakReference;
import java.util.concurrent.atomic.AtomicBoolean;
public class NetUser {
/** channel 绑定 netUser 对象 */
public static final AttributeKey<NetUser> NET_USER_KEY = AttributeKey.valueOf(NetUser.class, "NET_USER");
private final WeakReference<Channel> channel;
private final AtomicBoolean isActive = new AtomicBoolean(true);
protected final WeakReference<Channel> channel;
public NetUser(Channel channel) {
this.channel = new WeakReference<>(channel);
@ -23,17 +20,19 @@ public class NetUser {
return false;
}
public boolean isActiveChannel() {
public boolean isActive() {
Channel chan = this.channel.get();
return chan != null && chan.isActive();
}
public boolean isActive() {
return this.isActive.get();
}
public void inactive() {
this.isActive.set(false);
/**
* 登录后设置为账号
*/
public void upgradeAccount(Account account) {
Channel chan = this.channel.get();
if (chan != null) {
chan.attr(NET_USER_KEY).set(account);
}
}
public void write(Object message) {

17
im-das-api/im-das-user-api/src/main/java/net/sopod/soim/das/user/api/service/UserDasService.java

@ -0,0 +1,17 @@
package net.sopod.soim.das.user.api.service;
import net.sopod.soim.das.user.api.model.entity.ImUser;
/**
* DasUserService
*
* @author tmy
* @date 2022-04-13 23:28
*/
public interface UserDasService {
ImUser getUserById(Long id);
ImUser getUserByAccount(String account);
}

2
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/DasUserApplication.java

@ -11,9 +11,9 @@ import org.springframework.boot.autoconfigure.SpringBootApplication;
* @author tmy
* @date 2022-03-31 22:31
*/
@EnableDubbo(scanBasePackages = {"net.sopod.soim.das.user.service"})
@SpringBootApplication
@MapperScan("net.sopod.soim.das.user.dao")
@EnableDubbo(scanBasePackages = {"net.sopod.soim.das.user.service"})
public class DasUserApplication {
public static void main(String[] args) {

7
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/HelloService.java

@ -1,7 +0,0 @@
package net.sopod.soim.das.user.service;
public interface HelloService {
String sayHello(String name);
}

27
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/HelloServiceImpl.java

@ -1,27 +0,0 @@
package net.sopod.soim.das.user.service;
import net.sopod.soim.logic.api.segmentid.core.SegmentIdGenerator;
import org.apache.dubbo.config.annotation.DubboService;
import org.apache.dubbo.rpc.RpcContext;
import javax.annotation.Resource;
/**
* HelloServiceImpl
*
* @author tmy
* @date 2022-03-28 16:23
*/
@DubboService(version = "1.0.0")
public class HelloServiceImpl implements HelloService {
@Resource
private SegmentIdGenerator segmentIdGenerator;
@Override
public String sayHello(String name) {
System.out.println("be invoked! client:" + RpcContext.getClientAttachment().getObjectAttachments());
return "hello "+ name;
}
}

35
im-das/im-das-user/src/main/java/net/sopod/soim/das/user/service/UserDasServiceImpl.java

@ -0,0 +1,35 @@
package net.sopod.soim.das.user.service;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.query.QueryWrapper;
import lombok.AllArgsConstructor;
import net.sopod.soim.das.user.api.model.entity.ImUser;
import net.sopod.soim.das.user.api.service.UserDasService;
import net.sopod.soim.das.user.dao.UserMapper;
import org.apache.dubbo.config.annotation.DubboService;
/**
* UserDasServiceImpl
*
* @author tmy
* @date 2022-04-13 23:30
*/
@DubboService
@AllArgsConstructor
public class UserDasServiceImpl implements UserDasService {
private UserMapper userMapper;
@Override
public ImUser getUserById(Long id) {
return userMapper.selectById(id);
}
@Override
public ImUser getUserByAccount(String account) {
LambdaQueryWrapper<ImUser> accountQuery = new QueryWrapper<ImUser>().lambda()
.eq(ImUser::getUsername, account);
return userMapper.selectOne(accountQuery);
}
}

8
im-das/im-das-user/src/main/resources/application.yml

@ -1,8 +1,12 @@
spring:
application:
name: im-das-user
dubbo:
application:
name: das-user
name: ${spring.application.name}
registry:
address: nacos://124.222.131.236:3848
group: im-user
protocol:
port: 3011
@ -10,4 +14,4 @@ mybatis-plus:
mapper-locations: classpath:mapper/*.xml
im-segment-id:
enabled: true
enabled: true

2
im-das/im-das-user/src/main/resources/mapper/UserMapper.xml

@ -2,6 +2,4 @@
<!DOCTYPE mapper PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN" "http://mybatis.org/dtd/mybatis-3-mapper.dtd" >
<mapper namespace="net.sopod.soim.das.user.dao.UserMapper">
</mapper>

35
im-entry-http/pom.xml

@ -0,0 +1,35 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>so-im</artifactId>
<groupId>net.sopod</groupId>
<version>1.0.0</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>im-entry-http</artifactId>
<description>提供im-entry监控,节点负载分配,http登录服务,后面用dubbo http网关替代</description>
<dependencies>
<dependency>
<groupId>net.sopod</groupId>
<artifactId>im-logic-user-api</artifactId>
<version>${soim.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-spring-boot-starter</artifactId>
</dependency>
<dependency>
<groupId>org.apache.dubbo</groupId>
<artifactId>dubbo-registry-nacos</artifactId>
</dependency>
</dependencies>
</project>

21
im-entry-http/src/main/java/net/sopod/soim/entry/http/EntryHttpApplication.java

@ -0,0 +1,21 @@
package net.sopod.soim.entry.http;
import org.apache.dubbo.config.spring.context.annotation.EnableDubbo;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
/**
* EntryHttpApplication
*
* @author tmy
* @date 2022-04-13 23:08
*/
@EnableDubbo
@SpringBootApplication
public class EntryHttpApplication {
public static void main(String[] args) {
SpringApplication.run(EntryHttpApplication.class, args);
}
}

32
im-entry-http/src/main/java/net/sopod/soim/entry/http/controller/AuthController.java

@ -0,0 +1,32 @@
package net.sopod.soim.entry.http.controller;
import net.sopod.soim.entry.http.model.ao.PwdAuthAO;
import net.sopod.soim.logic.user.auth.model.ImAuth;
import net.sopod.soim.logic.user.service.UserAuthService;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
/**
* AuthController
*
* @author tmy
* @date 2022-04-13 23:09
*/
@RestController
@RequestMapping("/auth")
public class AuthController {
@DubboReference
private UserAuthService userAuthService;
@PostMapping("/pwdAuth")
public ImAuth pwdAuth(@RequestBody PwdAuthAO authAO) {
ImAuth imAuth = userAuthService.pwdAuth(authAO.getAccount(), authAO.getPassword());
String accessToken = imAuth.getAccessToken();
return imAuth;
}
}

18
im-entry-http/src/main/java/net/sopod/soim/entry/http/model/ao/PwdAuthAO.java

@ -0,0 +1,18 @@
package net.sopod.soim.entry.http.model.ao;
import lombok.Data;
/**
* PwdAuthAO
*
* @author tmy
* @date 2022-04-13 23:14
*/
@Data
public class PwdAuthAO {
private String account;
private String password;
}

13
im-entry-http/src/main/java/net/sopod/soim/entry/http/service/ImEntryMonitorService.java

@ -0,0 +1,13 @@
package net.sopod.soim.entry.http.service;
/**
* ImMonitorService
*
* @author tmy
* @date 2022-04-13 23:27
*/
public class ImEntryMonitorService {
}

11
im-entry-http/src/main/java/net/sopod/soim/entry/http/service/ImEntryService.java

@ -0,0 +1,11 @@
package net.sopod.soim.entry.http.service;
/**
* ImEntryService
*
* @author tmy
* @date 2022-04-13 23:27
*/
public class ImEntryService {
}

14
im-entry-http/src/main/resources/application.yml

@ -0,0 +1,14 @@
spring:
application:
name: im-entry-http
dubbo:
application:
name: ${spring.application.name}
registry:
address: nacos://124.222.131.236:3848
group: so-im
provider:
register: false # 不向注册中心注册服务
protocol: injvm # 服务提供只供jvm内部使用, 不暴露在外面 (不启动dubbo provider服务)
consumer:
check: false

8
im-entry/src/main/java/net/sopod/soim/entry/handler/HelloHandler.java

@ -1,7 +1,9 @@
package net.sopod.soim.entry.handler;
import com.google.protobuf.MessageLite;
import net.sopod.soim.core.handler.AccountMessageHandler;
import net.sopod.soim.core.handler.NetUserMessageHandler;
import net.sopod.soim.core.session.Account;
import net.sopod.soim.core.session.NetUser;
import net.sopod.soim.data.msg.hello.HelloPB;
import net.sopod.soim.entry.delay.NetUserDelayTaskManager;
@ -25,7 +27,7 @@ import java.util.concurrent.TimeUnit;
* @date 2022-04-10 19:19
*/
@Service
public class HelloHandler extends NetUserMessageHandler<HelloPB.Hello> {
public class HelloHandler extends AccountMessageHandler<HelloPB.Hello> {
private static final Logger logger = LoggerFactory.getLogger(HelloHandler.class);
@ -36,7 +38,7 @@ public class HelloHandler extends NetUserMessageHandler<HelloPB.Hello> {
private SegmentIdGenerator segmentIdGenerator;
@Override
public MessageLite handle(NetUser netUser, HelloPB.Hello msg) {
public MessageLite handle(Account account, HelloPB.Hello msg) {
logger.info("get hello message: {}", segmentIdGenerator.nextId("im-entry-hello"));
logger.info("msg={}, {}", msg.getId(), msg.getStr());
CompletableFuture<String> hi = userService.sayHi("黄绿");
@ -48,7 +50,7 @@ public class HelloHandler extends NetUserMessageHandler<HelloPB.Hello> {
RpcContext.getServiceContext().getCompletableFuture().whenComplete((res, err) -> {
logger.info("async sayHello, {}", res);
});
NetUserDelayTaskManager.addTask(netUser, msg, 5, TimeUnit.SECONDS);
NetUserDelayTaskManager.addTask(account, msg, 5, TimeUnit.SECONDS);
return null;
}

36
im-entry/src/main/java/net/sopod/soim/entry/handler/auth/LoginHandler.java

@ -0,0 +1,36 @@
package net.sopod.soim.entry.handler.auth;
import com.google.protobuf.MessageLite;
import net.sopod.soim.core.handler.NetUserMessageHandler;
import net.sopod.soim.core.session.Account;
import net.sopod.soim.core.session.NetUser;
import net.sopod.soim.data.msg.auth.Auth;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Service;
/**
* LoginHandler
*
* @author tmy
* @date 2022-04-13 22:20
*/
@Service
public class LoginHandler extends NetUserMessageHandler<Auth.Login> {
private static final Logger logger = LoggerFactory.getLogger(LoginHandler.class);
@Override
public MessageLite handle(NetUser netUser, Auth.Login msg) {
logger.info("auth login: {}, {}", msg.getAccount(), msg.getPassword());
Account account = Account.AccountBuilder.newBuilder()
.setNetUser(netUser)
.setAccountId(1L)
.setName(msg.getAccount())
.build();
// 注册为账号添加到连接
netUser.upgradeAccount(account);
return null;
}
}

1
im-entry/src/main/java/net/sopod/soim/entry/server/InboundImMessageHandler.java

@ -39,7 +39,6 @@ public class InboundImMessageHandler extends SimpleChannelInboundHandler<Message
@Override
public void channelInactive(ChannelHandlerContext ctx) {
Attribute<NetUser> netUser = ctx.channel().attr(NetUser.NET_USER_KEY);
netUser.get().inactive();
ctx.fireChannelInactive();
}

2
im-entry/src/main/resources/application.yml

@ -9,6 +9,6 @@ dubbo:
group: so-im
provider:
register: false # 不向注册中心注册服务
protocol: injvm # 服务提供只供jvm内部使用, 不暴露在外面
protocol: injvm # 服务提供只供jvm内部使用, 不暴露在外面 (不启动dubbo provider服务)
consumer:
check: false

1
im-logic-api/im-logic-user-api/pom.xml

@ -12,5 +12,4 @@
<artifactId>im-logic-user-api</artifactId>
</project>

9
im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ReqLogin.java → im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/model/ImAuth.java

@ -1,15 +1,18 @@
package net.sopod.soim.logic.user.auth.model;
import lombok.Data;
/**
* LoginParam
*
* @author tmy
* @date 2022-03-31 21:06
*/
public class ReqLogin {
@Data
public class ImAuth {
private String username;
private String accessToken;
private String password;
private long expireMs;
}

4
im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/auth/service/AuthService.java

@ -1,6 +1,6 @@
package net.sopod.soim.logic.user.auth.service;
import net.sopod.soim.logic.user.auth.model.ReqLogin;
import net.sopod.soim.logic.user.auth.model.ImAuth;
/**
* AuthService
@ -13,6 +13,6 @@ public interface AuthService {
/**
* 登录请求
*/
void login(ReqLogin reqLogin);
void login(ImAuth imAuth);
}

15
im-logic-api/im-logic-user-api/src/main/java/net/sopod/soim/logic/user/service/UserAuthService.java

@ -0,0 +1,15 @@
package net.sopod.soim.logic.user.service;
import net.sopod.soim.logic.user.auth.model.ImAuth;
/**
* AuthService
*
* @author tmy
* @date 2022-04-13 22:55
*/
public interface UserAuthService {
ImAuth pwdAuth(String account, String password);
}

33
im-logic/im-logic-user/src/main/java/net/sopod/soim/logic/user/service/UserAuthServiceImpl.java

@ -0,0 +1,33 @@
package net.sopod.soim.logic.user.service;
import net.sopod.soim.das.user.api.model.entity.ImUser;
import net.sopod.soim.das.user.api.service.UserDasService;
import net.sopod.soim.logic.user.auth.model.ImAuth;
import org.apache.dubbo.config.annotation.DubboReference;
import org.apache.dubbo.config.annotation.DubboService;
import java.util.concurrent.CompletableFuture;
/**
* AuthServiceImpl
*
* @author tmy
* @date 2022-04-13 22:57
*/
@DubboService
public class UserAuthServiceImpl implements UserAuthService {
@DubboReference
private UserDasService userDasService;
@Override
public ImAuth pwdAuth(String account, String password) {
ImUser imUser = userDasService.getUserByAccount(account);
if (imUser == null) {
return null;
}
// TODO status,
return null;
}
}

6
pom.xml

@ -21,6 +21,7 @@
<module>im-das-api</module>
<module>im-logic-api/im-segment-id-api</module>
<module>im-logic/im-segment-id</module>
<module>im-entry-http</module>
</modules>
<properties>
@ -124,6 +125,11 @@
<artifactId>spring-boot-starter</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
<version>${spring-boot.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-autoconfigure</artifactId>

Loading…
Cancel
Save