git user-dev.yml
spring: datasource: driver-class-name: com.mysql.jdbc.Driver username: root password: 123456 url: jdbc:mysql://127.0.0.1:3306/SpringCloud_Sell?characterEncoding=utf-8&useSSL=false redis: host: 127.0.0.1 port: 6379
package com.imooc.user; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; @SpringBootApplication @EnableDiscoveryClient public class UserApplication { public static void main(String[] args) { SpringApplication.run(UserApplication.class, args); } }
package com.imooc.user.controller; import com.imooc.user.VO.ResultVO; import com.imooc.user.constant.CookieConstant; import com.imooc.user.constant.RedisConstant; import com.imooc.user.dataobject.UserInfo; import com.imooc.user.enums.ResultEnum; import com.imooc.user.enums.RoleEnum; import com.imooc.user.service.UserService; import com.imooc.user.utils.CookieUtil; import com.imooc.user.utils.ResultVOUtil; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.redis.core.StringRedisTemplate; import org.springframework.util.StringUtils; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestParam; import org.springframework.web.bind.annotation.RestController; import javax.servlet.http.Cookie; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.util.UUID; import java.util.concurrent.TimeUnit; @RestController @RequestMapping("/login") public class LoginController { @Autowired private UserService userService; @Autowired private StringRedisTemplate stringRedisTemplate; /** * 买家登录 * @param openid * @param response * @return */ @GetMapping("/buyer") public ResultVO buyer(@RequestParam("openid") String openid, HttpServletResponse response) { //1. openid和数据库里的数据是否匹配 UserInfo userInfo = userService.findByOpenid(openid); if (userInfo == null) { return ResultVOUtil.error(ResultEnum.LOGIN_FAIL); } //2. 判断角色 if (RoleEnum.BUYER.getCode() != userInfo.getRole()) { return ResultVOUtil.error(ResultEnum.ROLE_ERROR); } //3. cookie里设置openid=abc CookieUtil.set(response, CookieConstant.OPENID, openid, CookieConstant.expire); return ResultVOUtil.success(); } @GetMapping("/seller") public ResultVO seller(@RequestParam("openid") String openid, HttpServletRequest request, HttpServletResponse response) { //判断是否已登录 Cookie cookie = CookieUtil.get(request, CookieConstant.TOKEN); if (cookie != null && !StringUtils.isEmpty(stringRedisTemplate.opsForValue().get(String.format(RedisConstant.TOKEN_TEMPLATE, cookie.getValue())))) { return ResultVOUtil.success(); } //1. openid和数据库里的数据是否匹配 UserInfo userInfo = userService.findByOpenid(openid); if (userInfo == null) { return ResultVOUtil.error(ResultEnum.LOGIN_FAIL); } //2. 判断角色 if (RoleEnum.SELLER.getCode() != userInfo.getRole()) { return ResultVOUtil.error(ResultEnum.ROLE_ERROR); } //3. redis设置key=UUID, value=xyz String token = UUID.randomUUID().toString(); Integer expire = CookieConstant.expire; stringRedisTemplate.opsForValue().set(String.format(RedisConstant.TOKEN_TEMPLATE, token), openid, expire, TimeUnit.SECONDS); //4. cookie里设置token=UUID CookieUtil.set(response, CookieConstant.TOKEN, token, CookieConstant.expire); return ResultVOUtil.success(); } }
- 业务上,主要是这个类,其他基本都是辅助工具类。
Zuul 鉴权(api-gateway)
<?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"> <modelVersion>4.0.0</modelVersion> <groupId>com.imooc</groupId> <artifactId>api-gateway</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>jar</packaging> <name>api-gateway</name> <description>Demo project for Spring Boot</description> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.0.0.M3</version> <relativePath/> <!-- lookup parent from repository --> </parent> <properties> <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding> <java.version>1.8</java.version> <spring-cloud.version>Finchley.M2</spring-cloud.version> </properties> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-config</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> <repositories> <repository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </repository> <repository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </repository> </repositories> <pluginRepositories> <pluginRepository> <id>spring-snapshots</id> <name>Spring Snapshots</name> <url>https://repo.spring.io/snapshot</url> <snapshots> <enabled>true</enabled> </snapshots> </pluginRepository> <pluginRepository> <id>spring-milestones</id> <name>Spring Milestones</name> <url>https://repo.spring.io/milestone</url> <snapshots> <enabled>false</enabled> </snapshots> </pluginRepository> </pluginRepositories> </project>