一、引入aop依赖
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-aop</artifactId>
</dependency>
二、编写一个工具类TokenUtil
1、通过用户生成token
2、通过token验证用户是否登录
3、通过token获取用户实体类
public class TokenUtil {
/**
* 创建一个map 用于存储所有的令牌
*
* token - User
*/
private static Map<String, User> tokenMap = new HashMap<>();
/**
* 生成token,存储token-user的对应关系
* 返回token令牌
* @param user
* @return
*/
public static String generateToken(User user){
// 生成唯一不重复的字符串
String token = UUID.randomUUID().toString();
tokenMap.put(token,user);
return token;
}
/**
* 验证token是否合法
* @param token
* @return
*/
public static boolean verify(String token){
return tokenMap.containsKey(token);
}
/**
* 根据token获取用户信息
* @param token
* @return
*/
public static User getUser(String token){
return tokenMap.get(token);
}
public static void main(String[] args) {
for (int i=0; i<20; i++){
System.out.println(UUID.randomUUID().toString());
}
}
}
三、建立一个拦截业务逻辑类AuthInterceptor
public class AuthInterceptor implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("AuthInterceptor preHandle....");
String uri = request.getRequestURI();
System.out.println("当前路径:"+uri);
/**
* HandlerMethod=>Controller中标注@RequestMapping的方法
* 需要配置静态资源不拦截时,添加这块逻辑 => 前后端分离项目
*
*/
// 是我们的conrtoller中的方法
if (!(handler instanceof HandlerMethod)) {
return true;
}
String token = request.getHeader(GlobalConstant.HEADER_TOKEN);
User user = TokenUtil.getUser(token);
// 一定是登陆验证成功的
if(!user.getMenuUrlList().contains(uri)){
throw new RuntimeException("403 Forbidden!");
}
return true;
}
}
在WebMvcConfig中注入上面类并编写拦截规则
如果用户有这个角色有这个访问权限才可以通行
四、数据库只需要用户id
通过后就会查到信息
注:
项目代码的gitee地址https://gitee.com/hbuws/jwlb.git
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/115347.html