原来项目地址
https://github.com/zhshuixian/learn-spring-boot-2.git
TokenFilter是比SpringSecurity先校验的过滤器。TokenFilter的作用就是从token或者session中获取SpringSecurity校验的权限信息。 如果获取不到则看该资源是否支持SpringSecurity匿名访问。
TokenFilter是验证认证的(准确说获取用户信息提交给SpringSecurity的),
SpringSecurity则是依据该资源所需要的权限和TokenFilter提交的用户信息来验证该用户是否有授访问该资源。
SpringSecurity未授权是重定向login,但是前后端分离,不需要重定向,只用返回json数据,告诉登录失效了。
从下面两张图的调用关系来看,principal对应着用户名username,credentials对应着密码password。
整个SpringSecurity的设计应该非常完善,想象之中应该是主要替换jwt的算法和查询数据库登录的部分即可,其他部分应该都是非常晚上的。
org.xian.token.secutiry.UserDetailsServiceImpl.loadUserByUsername 这里查询数据库,获取用户信息
org.xian.token.secutiry.MyAuthenticationSuccessHandler 这里使用jwt返回token信息。
这个非常重要的类,负责了用户信息处理等
org.springframework.security.authentication.dao.DaoAuthenticationProvider.retrieveUser
retrieveUser 方法就是根据用户登录输入的用户名去查找用户,如果没找到,就会抛出一个 UsernameNotFoundException,这个异常被 catch 之后,会首先判断是否要隐藏这个异常,如果不隐藏,则原异常原封不动抛出来,如果需要隐藏,则抛出一个新的 BadCredentialsException 异常,BadCredentialsException 异常从字面理解就是密码输入错误的异常。
./gradlew clean bootJar -x test
scp build/libs/spring-security-jwt-token-0.0.1-SNAPSHOT.jar insite@insite.cupb.top:/home/insite/app/admin/
杀死原有进程
ps -ef|grep 'java'|grep 'spring'|grep 'spring-security-jwt'|grep -v 'grep'|awk '{print $2}'|xargs -tI {} kill -9 {}
启动
nohup /opt/jbr/bin/java -Dfile.encoding=utf-8 -Duser.timezone=GMT+08 -jar /home/insite/app/admin/spring-security-jwt-token-0.0.1-SNAPSHOT.jar --logging.level.root=warn -Xmx1G -Xms512M -server -XX:+UseG1GC >>/home/insite/app/admin/spring-security.log 2>&1 &
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。