一、使用Spring Security
1、在pom 文件中添加Spring Security的依赖。
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
<version>${spring.version}</version>
</dependency>
2、启动项目Spring Security会在控制台中打印密码,用户名默认为user。
3、在浏览其中输入接口http://localhost:8081/menu/list,会跳转到login页面,弹出Spring Security默认的登录框。在登录框中输入用户名和密码后,会调用接口返回数据。
每次启动项目Spring Security都会生成一个不同的密码,这个是加密后的密码。
二、使用自定义用户、密码登录
在开发过过程中,当然要使用自己的用户名和密码登录,而不是Spring Security自带的用户名和密码登录。我的登录名和密码是admin/123456。
1、自定义UserDetailsServiceImpl实现Spring Security的UserDetailsService,实现UserDetailsService的loadUserByUsername(String username)方法。
在该方法中调用自定义的UserServic接口,根据用户名获取用户信息。然后将用户信息传递给自定义的实现了UserDetails的对象。
2、UserDetails的实现类获取用户的登录名和密码以及一些业务参数,如用户id,并设置所有返回类型为boolean的方法,返回true。默认设置权限为admin。
3、对密码进行加密
如果只有上面的步骤,则在登录时会报错,这是因为Spring Security中没有密码的的加密方式。解决方式是添加WebSecurityConfigurerAdapter的子类,
在该类中配置密码的加密方式。在验证后如果加密后的密码和保存的密码一致,则验证通过。
三、使用自己的登录页面实现登录
登录当然不能用Spring Security的页面来登录了,我们需要设计自己的登录页面来登录,登录成功后进入到首页。
1、首先配置登录成功和登录失败的处理类,返回的json格式的数据
2、WebSecurityConfigurerAdapter的子类中,重写configure(HttpSecurity httpSecurity)设置一些配置
当前后分离的时候,会涉及到跨域请求的问题,这个时候可以调用cors()方法来解决该问题。
3、Spring Security默认使用表单形式传递数据,如果前端是使用json传递数据,则需要自己写一个集成了UsernamePasswordAuthenticationFilter类的过滤器
过滤器重写父类的attemptAuthentication(HttpServletRequest request, HttpServletResponse response)方法,解析request请求中数据获取用户名和密码。
然后在WebSecurityConfigurerAdapter的子类中创建该过滤器,并进行注册。
初次学习Spring Security,其中有几点自己踩过的坑,在这里记下来,以便随时能够查看。