1.默认表单验证
首先在config包中新建一个SpringSecurity的配置类
@EnableWebSecurity
public webSecurityConfig extends WebSecurityConfigureAdapter{
}
在该配置类中有三个常重写的方法:
@Override
// 配置springSecurity用户和权限
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
super.configure(auth);
}
@Override
// 定义不需要进行安全校验的url
public void configure(WebSecurity web) throws Exception {
super.configure(web);
}
@Override
// 定义需要和不需要安全校验的url
protected void configure(HttpSecurity http) throws Exception {
super.configure(http);
}
先对springSecurity进行最基本的配置:
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests()
// 以api开头的url不拦截
.antMatchers("/api/**").permitAll()
// 以controller开头的url拦截
.antMatchers("/controller/**").authenticated()
// 除此之外的所有其他url都要被认证,也就是都拦截
.anyRequest().authenticated()
.and()
// 配置表单登录
.formLogin()
.and()
// 以httpBasic的方式进行表单登录
// 如果没有这个,则springSecurity会默认生成一个登录页进行登录
.httpBasic();
}
2.自定义表单认证
上面使用了httpBasic或者springSecurity默认的表单进行了认证,但是在开发过程中经常是自己写一个登录页面进行登录,下面对这种自定义的表单配置进行介绍
其实实现方式很简单,在formLogin()后面加一个方法即可:
http.authorizeRequests()
.antMatchers("/api/**").permitAll()
.antMatchers("/controller/**").authenticated()
.anyRequest().authenticated()
.and()
.formLogin()
// 在这里定义一个login页面即可
.loginPage("/login.html")
.and()
.httpBasic();
上面链式配置方法中,其实对应了之前用xml配置的标签,比如
- authorizeRequests对应< intercept-url >标签
- formLogin对应< form-login >标签
所以对于authorizeRequests方法,实质上是返回了一个URL的拦截注册器,我们可以调用里面的一些方法,比如anyRequest、antMatchers等方法来对URL进行匹配
除此之外,还有一些其他的表单配置项(这里配置项都是在formLogin方法之后的)
// 自定义url:也就是进行表单提交的action属性
.loginProcessingUrl("/login")
这里在发送登录请求并认证成功后,一般会跳转到原页面(就是一开始访问的页面),但是在前后端分离的项目中,是靠json来进行数据传递的,所以这里需要返回json,实现方法如下
.successHandler(new AuthenticationSuccessHandler() {
@Override
public void onAuthenticationSuccess(HttpServletRequest request, HttpServletResponse response, Authentication authentication) throws IOException, ServletException {
OutputStream out = response.getOutputStream();
out.write("{json格式的字符串}");
}
})
同样的,也可以指定failureHandler,这里不再赘述