SpringSecurity之表单验证

本文介绍了如何在SpringSecurity中进行默认表单验证以及如何自定义表单认证。通过配置类设置基本的springSecurity配置,并展示如何用链式API自定义登录页面,包括授权请求的URL匹配和登录成功后的处理。同时,提到了在前后端分离项目中处理登录失败和成功返回JSON的方法。
摘要由CSDN通过智能技术生成

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,这里不再赘述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值