基于Java注解的Spring Security配置
Spring在早期版本的时候,全是基于xml配置文件,导致配置极其繁杂。后期的版本中,Spring提供了对基于Java注解的支持。Java注解的Spring使每个Bean类有了自配置的特性,通过在每个类中添加相应的Java注解,就可以标注这些类在系统中的功能,可以大大减少配置文件的管理。当然,Java注解的Spring也有一些缺点,比如说使用了注解来配置Spring就会让Spring丧失热部署的能力,因为Java注解会编译,编译之后如果还想改的话就必须修改源代码再次编译上线,而如果使用Spring配置文件的话,就可以直接修改配置文件中的内容,Spring框架会自动重新加载配置,实现热部署。
下面是完全基于注解的Spring MVC+Spring Security项目,在web.xml中没有任何配置。整了一个上午+下午两个小时,终于弄明白是怎么回事了。果然还是要好好了解下Spirng MVC的内部原理和底层实现,Spring MVC启动器可以继承AbstractAnnotationConfigDispatcherServletInitializer类,在getRootConfigClasses()方法中添加继承了WebMvcConfigurerAdapter的实现类,在getServletMappings()方法中配置Spring MVC需要拦截的请求路径正则表达式。而在WebMvcConfigurerAdapter实现类中,就可以定义我们平时在mvc-dispatcher.xml文件中配置的一些bean对象。要启动Spring Security还需要自己实现一个AbstractSecurityWebApplicationInitializer的子类,如果是基于Spring MVC的项目,就可以空实现,否则就需要在空构造方法中调用父类的构造方法,传入自己的Spring Security配置类,也就是一个继承于WebSecurityConfigurerAdapter自定义类,而自定义的WebSecurityConfigurerAdapter的子类,就相当于spring-security.xml文件,根据spring-security.xml文件中的配置相应地在configure(HttpSecurity htt)方法中对http进行配置即可。而WebSecurityConfigurerAdapter.configureGlobal(AuthenticationManagerBuilder auth)方法中,就可以配置Spring Security用户的信息数据源。在这里,调用auth.userDetailsService(new CustomeUserDetailService());这样运行项目发现在提交验证表单后老是提示404,也就是没有处理器可以处理提交的用户信息表单,不能进行验证,这也是卡住我大半天的问题,在
stack overflow终于找到了解决方法,在这时需要给formLogin添加loginProcessingUrl,在基于xml配置Spring Security的时候就没出现这个问题,现在还是很迷。
Sprng MVC启动器,看名字就可以知道,具体是如何做到自定义类就可以实现Spring MVC启动的呢?
package security.controller;
import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;
public class MvcWebApplicationInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
pro