上一章介绍了最简单的一个Security的使用。有一个登录界面,有一个默认的用户,和一个随机生成的密码,为了后期这个登录我能使用自己的,所以需要使用一个数据库存储用户名和密码,这一章和Spring Security本无关,但是在使用时发现,也有点的关系。
因为我的需求相对简单,我又不想整个复杂的数据库,为了简化数据库这一环,在Spring Security上更深入研究,所以使用了H2数据库,因为这个数据库不需要你安装任何的客户端,添加依赖如下直接就能使用。
<!--H2数据库-->
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version> 2.1.214</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-data-jpa</artifactId>
<version>2.7.4</version>
</dependency>
在配置文件application.properties中添加对应的配置
spring.datasource.url=jdbc:h2:file:./h2data/user_info
spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.username=sa
spring.datasource.password=
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
spring.jpa.hibernate.ddl-auto=update
spring.h2.console.enabled=true
spring.h2.console.path=/h2-console
现在启动程序,并且访问localhost:8080/h2-console , 按照第一章的步骤输入用户名和生成的密码,就可以访问h2数据库的可视化页面中的登录页面了。
在JDBC_URL中填入配置文件里面url的地址,点击connect,就会出现下面的页面
为什么会这样?因为security阻止你访问了这个页面,这个时候security的作用终于展现出来了,就是阻碍你的开发,为了能够访问这个页面,就要对security进行一个配置。
新建一个类:
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
@Configuration
public class SecurityConfig extends WebSecurityConfigurerAdapter {
private final String[] matchers = new String[]{
"/h2-console/**"
};
@Override
protected void configure(HttpSecurity http) throws Exception {
http
//关闭csrf
.csrf().disable()
//不通过Session获取SecurityContext
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(matchers).anonymous()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated();
}
}
这个类里面设置了,除了可以匿名访问/h2-console/开头的地址,其余地址都需要授权才能访问,这个时候我们再启动程序,你就会发现默认的登录页面没有了,你访问localhost:8080/hello访问不了了,也没有登录页让你登录了,这是因为你覆盖了security的默认配置,有了你自己的配置,所以默认带的登录页等配置就统统消失了,就好比你长大了,翅膀硬了,有了自己的想法了,小时候的特权以及优待统统消失不见了,不好意思,上一句话说多了。
这个时候再访问localhost:8080/h2-console,还是可以弹出之前的页面,然后再次点击connect,就会出现下面这种页面:
这个嵌入页面也不给你显示,这个时候就需要在配置的代码里面加一行代码
@Override
protected void configure(HttpSecurity http) throws Exception {
http
//关闭csrf
.csrf().disable()
//不通过Session获取SecurityContext
.sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)
.and()
.authorizeRequests()
.antMatchers(matchers).anonymous()
// 除上面外的所有请求全部需要鉴权认证
.anyRequest().authenticated()
.and()
.headers().frameOptions().sameOrigin();
}
重启项目,第三次访问,终于出现了数据库可视化的完整界面了。
到目前为止,项目的文件结构如下所示:
相对于上一章的文件来说,多出了数据库文件,一个java类,一个配置文件,pom中多出了依赖,其余的代码均为改变,而启动程序之后,可以访问h2数据库的可视化页面,但是却无法访问到HelloWorldController里面的hello服务了。
最后说一嘴,H2数据库怎么使用自己研究,我的主攻方向还是使用Spring Security。