Spring boot 入门教程-token验证

// 判断是否存在令牌信息,如果存在,则允许登录

String accessToken = request.getHeader(“Authorization”);

if (null == accessToken) {

throw new CommonException(401, “无token,请重新登录”);

} else {

// 从Redis 中查看 token 是否过期

Claims claims;

try{

claims = TokenUtils.parseJWT(accessToken);

}catch (ExpiredJwtException e){

response.setStatus(401);

throw new CommonException(401, “token失效,请重新登录”);

}catch (SignatureException se){

response.setStatus(401);

throw new CommonException(401, “token令牌错误”);

}

String userName = claims.getId();

UserBase user = userBaseService.findUserByAccount(userName);

if (user == null) {

response.setStatus(401);

throw new CommonException(401, “用户不存在,请重新登录”);

}

// 当前登录用户@CurrentUser

request.setAttribute(CurrentUserConstants.CURRENT_USER, user);

return true;

}

} else {//不需要登录可请求

return true;

}

}

// 请求处理之后进行调用,但是在视图被渲染之前(Controller方法调用之后)

@Override

public void postHandle(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, ModelAndView modelAndView) throws Exception {

}

// 在整个请求结束之后被调用,也就是在DispatcherServlet 渲染了对应的视图之后执行(主要是用于进行资源清理工作)

@Override

public void afterCompletion(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) throws Exception {

}

}

/**

  • @BelongsProject:

  • @BelongsPackage: com.jdtaste.jdtastesso.web.intercepter.auth

  • @Author:

  • @CreateTime: 2018-07-04 15:45

  • @Description: 当前用户

*/

public class CurrentUserConstants {

/**

  • 当前用户参数名

*/

public final static String CURRENT_USER = “CurrentUser”;

}

6.自定义参数解析器

/**

  • @BelongsPackage: com.jdtaste.jdtastesso.web.intercepter.auth

  • @Author:

  • @CreateTime: 2018-07-04 15:42

  • @Description: 自定义参数解析器

  • 增加方法注入,将含有 @CurrentUser 注解的方法参数注入当前登录用户

*/

public class CurrentUserMethodArgumentResolver implements HandlerMethodArgumentResolver {

/*

  • supportsParameter:用于判定是否需要处理该参数分解,返回true为需要,并会去调用下面的方法resolveArgument。

*resolveArgument:真正用于处理参数分解的方法,返回的Object就是controller方法上的形参对象。

  • */

@Override

public boolean supportsParameter(MethodParameter parameter) {

System.out.println(“----------supportsParameter-----------” + parameter.getParameterType());

return parameter.getParameterType().isAssignableFrom(UserBase.class)//判断是否能转成UserBase 类型

&& parameter.hasParameterAnnotation(CurrentUser.class);//是否有CurrentUser注解

}

@Override

public Object resolveArgument(MethodParameter parameter, ModelAndViewContainer mavContainer,

NativeWebRequest webRequest, WebDataBinderFactory binderFactory) throws Exception {

System.out.println(“--------------resolveArgument-------------” + parameter);

UserBase user = (UserBase) webRequest.getAttribute(CurrentUserConstants.CURRENT_USER, RequestAttributes.SCOPE_REQUEST);

if (user != null) {

return user;

}

throw new MissingServletRequestPartException(CurrentUserConstants.CURRENT_USER);

}

}

7.将拦截器和参数解析器加入容器

/**

  • @BelongsProject:

  • @BelongsPackage: com.jdtaste.jdtastesso.conf

  • @Author:

  • @CreateTime: 2018-07-04 10:03

  • @Description: 配置URLInterceptor拦截器,以及拦截路径

*/

@EnableWebMvc

@Configuration

public class MyWebAppConfigurer extends WebMvcConfigurerAdapter {

@Override

public void addInterceptors(InterceptorRegistry registry) {

// addPathPatterns 用于添加拦截规则

// excludePathPatterns 用户排除拦截

registry.addInterceptor(authenticationInterceptor())

.addPathPatterns(“//”);

super.addInterceptors(registry);

}

@Override

public void addArgumentResolvers(List argumentResolvers) {

argumentResolvers.add(currentUserMethodArgumentResolver());

super.addArgumentResolvers(argumentResolvers);

}

@Bean

public CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver() {

return new CurrentUserMethodArgumentResolver();

}

/**

  • 解决 拦截器中注入bean 失败情况出现

  • addArgumentResolvers方法中 添加

  • argumentResolvers.add(currentUserMethodArgumentResolver());

*/

@Bean

public AuthenticationInterceptor authenticationInterceptor() {

return new AuthenticationInterceptor();

}

}

argumentResolvers.add(currentUserMethodArgumentResolver());

super.addArgumentResolvers(argumentResolvers);

}

@Bean

public CurrentUserMethodArgumentResolver currentUserMethodArgumentResolver() {

return new CurrentUserMethodArgumentResolver();

}

/**

  • 解决 拦截器中注入bean 失败情况出现

  • addArgumentResolvers方法中 添加

  • argumentResolvers.add(currentUserMethodArgumentResolver());

*/

@Bean

public AuthenticationInterceptor authenticationInterceptor() {

return new AuthenticationInterceptor();

}

}

8.Controller

@LoginRequired

@RequestMapping(value = “/token”)

public String token(@CurrentUser UserBase userBase,String account,String token) {

log.info(account+“----”+token);

log.info(“----”+userBase.getAccount());

log.info(“params==” + userBase.toString());

if (userBaseService.findUserByAccount(userBase.getAccount()) == null) {

return “账号不存在”;

} else {

UserBase result = null;

result = userBaseService.login(userBase);

//生成token

//String accessToken=TokenUtils.createJwtToken(userBase.getAccount());

if (result == null) {

return “密码错误”;

} else {

return “SUCCESS”;

}

}

}

@LoginRequired

@RequestMapping(value = “/token”)

public String token(@CurrentUser UserBase userBase,String account,String token) {

先自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级Java工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则近万的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《Java开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。

img

img

img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频

如果你觉得这些内容对你有帮助,可以扫码领取!

img

最后

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?

既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?

架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

如果你也想成为一名好的架构师,那或许这份Java核心架构笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

中高级开发必知必会:

alt=“img” style=“zoom: 33%;” />

最后

我想问下大家当初选择做程序员的初衷是什么?有思考过这个问题吗?高薪?热爱?

既然入了这行就应该知道,这个行业是靠本事吃饭的,你想要拿高薪没有问题,请好好磨练自己的技术,不要抱怨。有的人通过培训可以让自己成长,有些人可以通过自律强大的自学能力成长,如果你两者都不占,还怎么拿高薪?

架构师是很多程序员的职业目标,一个好的架构师是不愁所谓的35岁高龄门槛的,到了那个时候,照样大把的企业挖他。为什么很多人想进阿里巴巴,无非不是福利待遇好以及优质的人脉资源,这对个人职业发展是有非常大帮助的。

如果你也想成为一名好的架构师,那或许这份Java核心架构笔记你需要阅读阅读,希望能够对你的职业发展有所帮助。

中高级开发必知必会:

[外链图片转存中…(img-1ad10Yx3-1711447309012)]

需要更多Java资料的小伙伴可以帮忙点赞+关注,点击传送门,即可免费领取!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值