Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/scienjus/spring-authorization-manager
基于 Spring MVC,提供 API 服务端的身份验证功能。通过 Redis、MySQL 维护登录用户与分配 Token 的映射关系。
https://github.com/scienjus/spring-authorization-manager
Last synced: 3 days ago
JSON representation
基于 Spring MVC,提供 API 服务端的身份验证功能。通过 Redis、MySQL 维护登录用户与分配 Token 的映射关系。
- Host: GitHub
- URL: https://github.com/scienjus/spring-authorization-manager
- Owner: ScienJus
- Created: 2015-10-27T02:02:13.000Z (about 9 years ago)
- Default Branch: master
- Last Pushed: 2016-04-13T10:03:40.000Z (almost 9 years ago)
- Last Synced: 2025-01-10T06:35:27.732Z (10 days ago)
- Language: Java
- Homepage:
- Size: 116 KB
- Stars: 335
- Watchers: 47
- Forks: 177
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Spring Authorization Manager
为Api服务端添加简单的Token鉴权功能,基于Spring MVC
### 功能简述
1. 对每个请求进行身份验证,如果身份验证失败直接返回错误信息(可以自定义错误信息和Http状态码)
2. 通过鉴权信息获得当前登录的用户,并自动注入到Controller的方法中### 使用方法
仓库:
```
scienjus-mvn-repo
https://raw.github.com/ScienJus/maven/snapshot/
true
always
```
依赖:
```
com.scienjus
spring-authorization-manager
1.0-SNAPSHOT```
所有依赖库,相信大部分已经存在于你的项目中了:
```
com.scienjus
spring-authorization-manager
1.0-SNAPSHOT
org.springframework
spring-webmvc
org.springframework
spring-context
com.fasterxml.jackson.core
jackson-core
com.fasterxml.jackson.core
jackson-databind
javax.servlet
javax.servlet-api
redis.clients
jedis
mysql
mysql-connector-java
commons-dbcp
commons-dbcp
```
**使用Redis存储Token**
将Jedis客户端注入到`RedisTokenManager`:
```
```
**使用MySQL存储Token**
只需要将`RedisTokenManager`替换成`MySQLTokenManager`,并将数据源注入进去:
```
```
**配置身份验证的拦截器**
将配置好的`TokenManager`注入到`AuthorizationInterceptor`中:
```
```
接下来只需要对需要身份验证的方法加上`@Authorization`注解即可,例如:
```
@RestController
@RequestMapping("/home")
public class TokenController {@RequestMapping(method = RequestMethod.GET)
@Authorization
public ResponseEntity home() {
return new ResponseEntity<>("Hello World", HttpStatus.OK);
}}
```也可以直接在Controller类上加上该注解,这将会使该Controller中的所有方法都需要进行身份验证。
**配置获得当前登录用户的解析器**
首先需要实现`UserModelRepository`接口的`getCurrentUser`方法,可以通过Key得到对应的用户对象,然后配置一个解析器,并将其注入到`CurrentUserMethodArgumentResolver`:
```
```
然后只需要在方法的参数上添加一个用户对象,并加上`@CurrentUser`注解,例如:
```
@RestController
@RequestMapping("/home")
public class TokenController {@RequestMapping(method = RequestMethod.GET)
@Authorization
public ResponseEntity home(@CurrentUser user) {
return new ResponseEntity<>("Hello " + user.getUsername(), HttpStatus.OK);
}}
```需要注意的是,拥有`@CurrentUser`参数的方法,可以没有`@Authorization`注解,此时如果请求未登录,该参数会为`null`。
但是如果想要使用`CurrentUserMethodArgumentResolver`则必须配置`AuthorizationInterceptor`。
###更新日志
**2016-3-1**
增加了泛型约束
**2015-11-27**
修改了拦截器的部分代码,内容为:
1. 将返回鉴权失败信息的输出流从`response.getWriter`改为了`response.getOutputStream`,因为`@ResponseBody`默认也是用的后者,便于统一监控返回内容。
2. 可以通过配置文件自定义鉴权失败的http状态码了,默认为401(unauthorized)。
3. 将返回鉴权失败的`Content-Type`设置为`application/json`了,否则可能会导致iOS的网络库`AFNetWorking`解析报错。###帮助
如果您在使用中遇到了问题,可以给我提 Issues,或是通过邮件联系我,我的邮箱是:`[email protected]`。
源码分析见我的这篇[博客][1]
一个简单的[Demo][2]
[1]:http://www.scienjus.com/restful-token-authorization/
[2]:https://github.com/ScienJus/spring-authorization-manager-demo/