Java/Spring 常用注解

# @Configuration

# @Autowired/@Inject

  • @Autowired

    • 来源于 Spring 框架。当 @Autowired(required = false) 时,若没有 Bean 可注入则不注入
  • @Inject

    • 来源于 JavaEE 规范。与 @Autowired 功能相同,但没有 required 属性

# @EnableGlobalMethodSecurity

注解或参数 说明
@EnableGlobalMethodSecurity @EnableGlobalMethodSecurity(prePostEnabled=true) 使系统支持 @PreAuthorize@PostAuthrize 两个注解。
@PreAuthorize REST 方法是否可以被调用
@PostAuthorize REST 方法的返回值是否允许被返回
  • @EnableGlobalMethodSecurity 一般与 @EnableWebSecurity 放在一起。

  • 举例:

    package com.concretepage.service;
    import org.springframework.security.access.prepost.PostAuthorize;
    import org.springframework.security.access.prepost.PreAuthorize;
    import com.concretepage.bean.Book;
    public interface IBookService {
        @PreAuthorize ("hasRole('ROLE_WRITE')")
        public void addBook(Book book);
    
        // returnObject 是内置的关键字
        @PostAuthorize ("returnObject.owner == authentication.name")
        public Book getBook();
    
        // #book 中,用 # 提取参数变量
        @PreAuthorize ("#book.owner == authentication.name")
        public void deleteBook(Book book);
    }
    

# @EnableWebSecurity

@Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
@Target(value = { java.lang.annotation.ElementType.TYPE })
@Documented
@Import({ WebSecurityConfiguration.class,
		SpringWebMvcImportSelector.class,
		OAuth2ImportSelector.class })
@EnableGlobalAuthentication
@Configuration
public @interface EnableWebSecurity {

	/**
	 * Controls debugging support for Spring Security. Default is false.
	 * @return if true, enables debug support with Spring Security
	 */
	boolean debug() default false;
}
  • 导入了 WebSecurityConfiguration.class 配置类。

在这个配置类中, 注入了一个非常重要的 bean: springSecurityFilterChain,这是 Spring Secuity 的核心过滤器,是请求的认证入口。

  • 使用了 @EnableGlobalAuthentication 注解,其源码为:
@Retention(value = java.lang.annotation.RetentionPolicy.RUNTIME)
@Target(value = { java.lang.annotation.ElementType.TYPE })
@Documented
@Import(AuthenticationConfiguration.class)
@Configuration
public @interface EnableGlobalAuthentication {
}

在这个注解中,引入了 AuthenticationConfiguration.class 配置类, 这个类是配置认证相关的核心类, 主要作用是向 spring 容器中注入 AuthenticationManagerBuilder, 使用建造者模式建造 AuthenticationManager, 这个类是身份认证的入口。

  • 总之,EnableWebSecurity 注解有两个核心作用:

    • 加载了 WebSecurityConfiguration,配置安全认证策略。

    • 加载了 AuthenticationConfiguration,配置认证信息。