springSecurity执行流程
整个程序执行的过程如下:
1、容器启动时 通过MyInvocationSecurityMetadataSource # loadResourceDefine 加载系统资源与权限列表resourceMap(一个Map结构,资源[url]为key,权限[auth]为value )
2、WEB服务器启动,加载security内置的过滤器链, HttpSessionContextIntegrationFilter LogoutFilter AuthenticationProcessingFilter DefaultLoginPageGeneratingFilter BasicProcessingFilter SecurityContextHolderAwareRequestFilter RememberMeProcessingFilter AnonymousProcessingFilter ExceptionTranslationFilter SessionFixationProtectionFilter FilterSecurityInterception
自定义过滤器拦截请求 MyFilterSecurityInterceptor ,并设置在FilterSecurityInterception之前拦截。 给自定义过滤器,注入参数(MyInvocationSecurityMetadataSource,MyAccessDecisionManager,MyUserDetailService)
3、用户登陆 通过 AuthenticationManager 对用户输入的用户名和密码,然后根据用户定义的密码算法和盐值等进行计算并和数据库比对。
4、如果验证成功 通过MyUserDetailsService # loadUserByUsername 生成UserDetails供Spring Security使用。
5、当用户点击某个功能(URL)时。 通过MyAccessDecisionManager # decide 根据URl取得 系统资源与权限列表 resourceMap 中的权限集合。与登录用户的权限集合进行循环对比,如果存在相同权限,代表用户具有访问该资源的权利。
http://blog.csdn.net/qq_15042899/article/details/73467049
- config包
- DruidDBConfig.java 配置druid线程池
- MybatisConfig.java 配置mybatis (其中在mybatis-config.xml中集成了PageHelper分页插件)
- MvcConfig.java 配置springMVC
- DruidDBConfig.java 配置druid线程池
- druid包 用于配置druid监控
- DruidStatViewServlet.java 需要继承 StatViewServlet
- DruidStatFilter.java 需要继承 WebStatFilter
- DruidStatViewServlet.java 需要继承 StatViewServlet
- resolve包
- MyThymeleafViewResolver.java 自定义的视图解析器,用于设置thymeleafViewResolve的优先级高于freemarkerViewResolver
- MyThymeleafViewResolver.java 自定义的视图解析器,用于设置thymeleafViewResolve的优先级高于freemarkerViewResolver
- security包 用于集成spring-security
* WebSecurityConfig.java
- MyInvocationSecurityMetadataSourceService.java
- MyAccessDecisionManager.java
- MyUserDetailService.java
- MyFilterSecurityInterceptor.java
- LoginSuccessHandler.java
- MyInvocationSecurityMetadataSourceService.java
1、springboot下面thymeleaf和freemarker两种共存,并且设置thymeleaf的优先级高于freemarker
http://blog.csdn.net/qq_15042899/article/details/72885889
@Configuration
@EnableWebSecurity //开启webSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
、、、此处省略代码
@Override
protected void configure(HttpSecurity http) throws Exception {
http
、、、此处省略代码
.rememberMe() //登录后记住用户,下次自动登录,数据库中必须存在名为persistent_logins的表
.tokenValiditySeconds( 7*24*60*60 ) //7天自动登录
.tokenRepository(tokenRepository() );//指定记住登录信息所使用的数据源
}
@Autowired
private DataSource dataSource;
/**
* 记住我功能使用的数据源
* spring security 内部都写死了,这里要把 这个DAO 注入
* @return
*/
@Bean
public JdbcTokenRepositoryImpl tokenRepository(){
JdbcTokenRepositoryImpl j=new JdbcTokenRepositoryImpl();
j.setDataSource(dataSource);
return j;
}