项目结构:
代码下载:555555
一、创建项目1.1、创建springboot
1.2、导包
org.springframework.boot spring-boot-starter-weborg.springframework.boot spring-boot-starter-securityorg.springframework.security spring-security-test
1.3、创建controller
@RestController
public class HelloController {
@GetMapping("/noLogin")
public String noLogin(){
return "no login";
}
}
1.4、启动项目
1.5、访问 http://localhost:8080/noLogin ,页面自动跳转到登录页面,
输入默认用户名:user
随机密码:
1.6、访问成功
二、自定义用户名和密码
1、配置文件
在 application.properties 文件中配置信息:
spring.security.user.name=admin spring.security.user.password=admin
2、代码中配置(先注释配置文件)
@Configuration
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
//通过重写configure方法,进行创建用户。表示在内存中配置了两个用户
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.inMemoryAuthentication()
.withUser("admin1")
.password(passwordEncoder().encode("admin1"))
.roles("admin1");
auth.inMemoryAuthentication()
.withUser("user1")
.password(passwordEncoder().encode("user1"))
.roles("user1");
}
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
注:从 Spring5 开始,强制要求密码要加密,如果非不想加密,可以使用一个过期的 PasswordEncoder 的实例 NoOpPasswordEncoder,这里配置的内存都是放在内存中的
三、忽略拦截
3.1、在 WebSecurityConfig 类中添加以下代码
@Override
public void configure(WebSecurity web) throws Exception {
web.ignoring().antMatchers("/noLogin"); // 需要忽略的路径(多个用逗号隔开,或者或者不重要)
}
四、登录权限配置
对于登录成功、登录失败,我们都可以继承WebSecurityConfigurerAdapter类来进行配置
4.1、修改controller,新增方法和注解@PreAuthorize
@RestController
public class HelloController {
@GetMapping("/noLogin")
public String noLogin(){
return "No login";
}
@GetMapping("/haveLogin")
public String haveLogin(){
return "Have login";
}
@GetMapping("/admin/role")
@PreAuthorize("hasAnyRole('adminRole')")
public String helloAdmin(){
return "hello adminRole";
}
@GetMapping("/test/role")
@PreAuthorize("hasAnyRole('testRole')")
public String helloUser(){
return "hello testRole";
}
@GetMapping("/role/adminAndTest")
@PreAuthorize("hasAnyRole('adminRole', 'testRole')")
public String index(){
return "adminRoleAndTestRole";
}
}
4.2、继续改造 WebSecurityConfig 类,添加以下代码
@Override
protected void configure(HttpSecurity http) throws Exception {
//参数文档说明:https://blog.csdn.net/weixin_34346099/article/details/92479543
http
.csrf().disable()
.authorizeRequests()
.antMatchers("/admin
;
}



