springboot整合security步骤

首先你需要自定义一个类,当然需要继承extends WebSecurityConfigurerAdapter类用@Configuration(声明这个类是配置文件)和@EnableWebSecurity(开启security安全声明)和@EnableGlobalMethodSecurity(prePostEnabled = true)(可以直接在controller的方法上声明注解,可以进行角色拦截)

然后重写configure(HttpSecurity http)的方法,这里面来自定义自己的拦截方法和业务逻辑。
security的大致过程是这样的。首先过滤器filter先拦截,然后调用mannger中的Provider来处理,设置统一信息返回处理让EntryPoint来处理返回请求。这里的类都需要自定义。并且在configure方法上声明才可以使用。

注意:只有filter类方法getPreAuthenticatedPrincipal不返回null才会走到provide中,如果不为null,则走到provide类的supports方法中,返回的布尔类型,如果为true,则走authenticate这个方法。为false则不走,出错的话走EntryPoint类,否则走controller里面对应的api
需要继承AbstractPreAuthenticatedProcessingFilter类和实现两个方法

public class RestPreAuthenticatedProcessingFilter extends AbstractPreAuthenticatedProcessingFilter{

    @Override
    protected Object getPreAuthenticatedPrincipal(HttpServletRequest request) { 
         return null;
    }

    @Override
    protected Object getPreAuthenticatedCredentials(HttpServletRequest httpServletRequest) {
        return null;
    }

}

自定义provide
需要继承AuthenticationProvider和实现两个方法

public class RestAuthenticationProvider implements AuthenticationProvider{
         @Override
    public Authentication authenticate(Authentication authentication){
    }
     @Override
    public boolean supports(Class<?> authentication) {

    }
}

设置统一信息返回处理类
需要继承AuthenticationEntryPoint,重写一个方法

public class RestAuthenticationEntryPoint implements AuthenticationEntryPoint{
      @Override
    public void commence(HttpServletRequest request, HttpServletResponse response,     AuthenticationException e){
    }
}

自定义过后还需要在configure方法中声明。有几个需要注意的地方
声明过滤器,因为过滤器需要一个Manager,所以要指定一个Manager。
并且Manager也需要指定里面的provide,因为是provide来处理逻辑的
所以config方法应该这样写

     /**
     * 为验证拦截器设置AuthenticationManager (由于用了springboot注入方式)
     * @return
     * @throws Exception
     */
    private RestPreAuthenticatedProcessingFilter getPreAuthenticatedProcessingFilter() throws Exception {
        RestPreAuthenticatedProcessingFilter filter = new RestPreAuthenticatedProcessingFilter(parameters.getNoneSecurityPath(),commonCacheUtil);
        filter.setAuthenticationManager(this.authenticationManagerBean());
        return  filter;
    }
     //指定provider
    @Override
    protected void configure(AuthenticationManagerBuilder auth)
            throws Exception {
        auth.authenticationProvider(new RestAuthenticationProvider());
    }

 @Override
    protected void configure(HttpSecurity http) throws Exception {

        http.csrf().disable()
                .authorizeRequests()
                .antMatchers(parameters.getNoneSecurityPath().toArray(new String[parameters.getNoneSecurityPath().size()])).permitAll()//符合条件的路径放过验证
//                .anyRequest().hasRole("BIKE_CLIENT")//其他全部需要 BIKE_CLIENT 角色
                .anyRequest().authenticated()//其他全部需要授权
                .and().httpBasic().authenticationEntryPoint(new RestAuthenticationEntryPoint())//设置统一信息返回处理
                .and()
                .sessionManagement().sessionCreationPolicy(SessionCreationPolicy.STATELESS)//无状态请求 不需要session
                .and()
                .addFilter(getPreAuthenticatedProcessingFilter())//添加自定义登录验证过滤器
                ;
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发疯的man

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值