生成一个由Spring Security开发的登录页面,从数据库查询账号密码与用户登入的账号密码校验,并将数据库中的权限内容放入Security中,用户访问接口时校验权限
时间: 2023-05-22 12:01:51 浏览: 51
可以使用Spring Security提供的表单登录功能来生成登录页面,并使用数据库中的账号密码进行校验。具体实现步骤如下:
1. 在Spring Boot项目中添加Spring Security依赖。
2. 创建一个实现UserDetailsService接口的类,用于从数据库中查询用户信息。
3. 配置Spring Security,包括登录页面、登录接口、权限控制等。
4. 在登录接口中校验用户输入的账号密码,并将数据库中的权限内容放入Security中。
以下是一个简单的示例代码:
```java
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserDetailsService userDetailsService;
@Autowired
private DataSource dataSource;
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/admin/**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin()
.loginPage("/login")
.defaultSuccessUrl("/")
.permitAll()
.and()
.logout()
.logoutUrl("/logout")
.permitAll();
}
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.jdbcAuthentication()
.dataSource(dataSource)
.usersByUsernameQuery("SELECT username, password, enabled FROM users WHERE username = ?")
.authoritiesByUsernameQuery("SELECT username, authority FROM authorities WHERE username = ?");
}
}
```
在上面的代码中,我们使用了JDBC进行用户认证和权限查询。其中,users表存储了用户的账号密码信息,authorities表存储了用户的权限信息。
在登录接口中,我们可以通过SecurityContextHolder获取当前用户的信息,并进行权限校验:
```java
@GetMapping("/admin")
@PreAuthorize("hasRole('ADMIN')")
public String admin() {
return "admin";
}
```
在上面的代码中,我们使用了@PreAuthorize注解进行权限控制,只有具有ADMIN角色的用户才能访问该接口。
总之,使用Spring Security可以很方便地实现登录认证和权限控制功能。