目录
前言
前面我们讲解了一些关于Security的基础知识及基本原理。我们今天看一下如何通过他实现一个简单的web权限认证方案!
设置用户名密码
1、通过配置文件设置用户名密码
在application.yml文件中配置
spring.security.user.name: admin
spring.security.user.password: admin
2、编写代码实现接口
package com.yuxuntoo.config;
@Configuration public class SecurityConfig {
// 注入 PasswordEncoder 类到 spring 容器中
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
}
package com.yuxuntoo.service;
@Service
public class LoginService implements User Details Service {
@Override public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
// TODO判断用户名是否存在
if (!"admin".equals(username)){
throw new UsernameNotFoundException("用户名不存在!");
}
// 从数据库中获取的密码 atguigu 的密文 String pwd = "$2a$10$2R/M6iU3mCZt3ByGXXXXXEEER23UqdeXrb27zkBIizBvAven0/na";
// 第三个参数表示权限
return new User(username,pwd, AuthorityUtils.commaSeparatedStringToAuthorityList("admin,"));
}
}
上面loadUserByUsername中TODO处是需要我们自己编写代码,实现数据库查询操作,具体代码实现此处省略了,可以使用Mybatis也可以使用Mybatis plus来完成具体的代码!
放行登录页面以及静态资源
我们可以通过配置类来实现登录页面以及静态资源的过滤,使其无需通过认证,即能访问。
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
// 注入 PasswordEncoder 类到 spring 容器中
@Bean
public PasswordEncoder passwordEncoder(){
return new BCryptPasswordEncoder();
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests() .antMatchers("/layui/**","/index") //表示配置请求路径
.permitAll() // 指定 URL 无需保护。
.anyRequest() // 其他请求
.authenticated(); //需要认证
}
}
好了,关于用户认证的逻辑就到这里。
欢迎大家点击下方卡片,关注《coder练习生》