SpringBoot踩坑记录(1)
Security配置简单登录,我就只想要个简单的登录啊....
可能我比较笨吧,别人写的Security的入门教程我看了都不得其法,总觉得很迷,看了源码也没搞懂。但是在经过半个周末,down了4-5个项目之后,我算是摸出一些门道了。
首先列一些我一开始感到困惑的问题:
/login 接口的具体实现在哪里?找了几篇博客+他们的项目看了都没发现,只有一个负责跳转到login页面的get接口???
我一开始也是这样的,很迷茫,既然说要鉴权要认证,不管你要做什么,总离不开登录吧?不过这个问题,我看过的博客都没有讲到,那么只有一个可能了。这个/login接口,确切的说是Post方法的/login接口,框架已经帮你实现了。我们需要关注的是怎么配置,让我们的数据能提供给框架做登录校验。
这里推荐一篇博文
https://www.cnblogs.com/ealenxie/p/9293768.html
回头来说说我们要怎么做:1.写一个用户类,这个类要实现UserDetails类我们姑且称之为SecurityUser,同时这个类要有username和password这两个属性,具体你是在这个类SecurityUser里设置一个原本User属性,还是继承原本的User,那就是你的事了。2.就是覆写loadUserByUsername方法,把用户查出来,再调用SecurityUser的构造方法拿到返回一个SecurityUser对象就OK了。
借用一下这位大佬的博文中的代码
@Bean
public UserDetailsService userDetailsService() { //用户登录实现
return new UserDetailsService() {
@Autowired
private UserRepository userRepository;
@Override
public UserDetails loadUserByUsername(String s) throws UsernameNotFoundException {
User user = userRepository.findByUsername(s);
if (user == null) throw new UsernameNotFoundException("Username " + s + " not found");
return new SecurityUser(user);
}
};
}
这里这位大佬用的是hibernate框架,所以你看不到sql,但是他就能通过username查到整个User,如果要改成Mybatis也好办,把UserRepository userRepository替换成你的service,把用户类上的注解删干净了,把Pom里相关依赖删了。
关于这个UserDetails类里面还有4个和权限相关的参数,他们怎们玩就是你的事了。如果你只需要一个简单的登录,那他们都返回true就好了。