文档章节

spring安全模块配置问题

Clover286
 Clover286
发布于 2017/02/27 12:16
字数 532
阅读 34
收藏 0

刚开始配置如下:

SecurityWebInitializer.java

package shop.config;

import org.springframework.security.web.context.AbstractSecurityWebApplicationInitializer;

public class SecurityWebInitializer extends AbstractSecurityWebApplicationInitializer {
}

SecurityConfig.java

package shop.config;

import javax.sql.DataSource;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;
import org.springframework.security.config.annotation.web.servlet.configuration.EnableWebMvcSecurity;
import org.springframework.security.web.authentication.rememberme.InMemoryTokenRepositoryImpl;

@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {

	@Autowired
	private DataSource dataSource;

	@Override
	protected void configure(HttpSecurity http) throws Exception {
		http.formLogin().and().authorizeRequests().antMatchers("/page/myOrder").authenticated().anyRequest().permitAll().and().csrf()
				.disable();
	}

	@Override
	protected void configure(AuthenticationManagerBuilder auth) throws Exception {

	}

}

WebInitializer.java

package shop.config;

import org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer;

public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
	@Override
	protected String[] getServletMappings() {
		return new String[] { "/" };
	}

	@Override
	protected Class<?>[] getRootConfigClasses() {
		return new Class<?>[] { RootConfig.class };
	}

	@Override
	protected Class<?>[] getServletConfigClasses() {
		return new Class<?>[] { WebConfig.class };
	}

}

WebConfig.java

package shop.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.ViewResolver;
import org.springframework.web.servlet.config.annotation.DefaultServletHandlerConfigurer;
import org.springframework.web.servlet.config.annotation.EnableWebMvc;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
import org.springframework.web.servlet.view.InternalResourceViewResolver;

@Configuration
@EnableWebMvc
@ComponentScan(basePackages = { "shop.web" })
public class WebConfig extends WebMvcConfigurerAdapter {

	@Bean
	public ViewResolver viewResolver() {
		InternalResourceViewResolver resolver = new InternalResourceViewResolver();
		resolver.setPrefix("/WEB-INF/jsp/");
		resolver.setSuffix(".jsp");
		resolver.setExposeContextBeansAsAttributes(true);
		return resolver;
	}

	@Override
	public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
		configurer.enable();
	}

}

RootConfig.java

package shop.config;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;
import org.springframework.context.annotation.ImportResource;

@Configuration
@ImportResource("classpath:spring/*.xml")
@ComponentScan(basePackages = { "shop.service" })
public class RootConfig {

}

报错如下:

严重: Exception starting filter springSecurityFilterChain
org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named 'springSecurityFilterChain' is defined

这个文献启发我解决的:http://stackoverflow.com/questions/17132675/no-bean-named-springsecurityfilterchain-is-defined-spring-security-3-1

摘录原文如下:

Be sure to have security configuration in the root web application context, not in a servlet application context. This is very common mistake.

Root web application context is for global application beans, including security configuration. Servlet application context is there for servlet specific beans - e.g. controllers, handler mappings and handler adapters.

If you really want to have your security configuration within a servlet context, then you need to specifycontextAttribute for the DelegatingFilterProxy.

<init-param>
    <param-name>contextAttribute</param-name>
    <param-value>org.springframework.web.servlet.FrameworkServlet.CONTEXT.appServlet</param-value>
</init-param>

解决方案如下:在RootConfig.java中引入如下代码,意思是加载SecurityConfig.class配置类。

@Import(SecurityConfig.class)

分析:我原先的配置是按照spring实战第四版中微调的,书中的RootConfig.java中@ComponentScan(basePackages = { "shop" })包扫码了整个文件,同时过滤了一部分不需要的,意味着他扫描了配置类所在的包,也就是扫描到了安全模块的配置类SecurityConfig.class。而我改成了@ComponentScan(basePackages = { "shop.service" }),只扫码了service包,当我把这个配置改成扫描整个项目时也修复了该问题,不报错。

进一步:

我把包扫描改成:即加入对配置类所在包的扫描,项目也不报错了。

@ComponentScan(basePackages = { "shop.service","shop.config" })

总结如下:spring安全模块的配置类要注入spring,不然的启动不了。方法最好还是通过在根配置文件中@Import(SecurityConfig.class)

© 著作权归作者所有

共有 人打赏支持
Clover286
粉丝 8
博文 199
码字总数 65713
作品 0
武汉
程序员
私信 提问
UCKeFu 1.3.0 发布,增加运营监控 API

UCKeFu v1.3.0 发布,UCKeFu 基于 JAVA 语言开发,是一个全渠道融合的客户支持服务平台,聚合企业内部多个客服渠道,帮助各种行业各种规模的企业建立完整客服体系。 通过将邮件、短信、电话语...

优客服多渠道客服系统
2017/04/24
1K
3
后台权限管理系统 FEBS 新增 Spring Security 版

FEBS-Security是一个简单高效的后台权限管理系统。项目基础框架采用全新的Java Web开发框架 —— Spring Boot2.0.4,消除了繁杂的XML配置,使得二次开发更为简单;数据访问层采用Mybatis,同...

mrbird
09/19
1K
0
Spring Social 1.1.2 发布,Spring 社交扩展框架

Spring Social 1.1.2 发布,包括Spring Social 的内核、web、安全和配置模块。此版本修复了上一版本中的依赖性问题。详情请看发行说明。 Project Site | Reference | JavaDoc Spring Social...

oschina
2015/05/20
1K
0
我为何停止使用 Spring

作者:张龙 来源:infoq Johannes Brodwall是一位程序员、解决方案架构师、用户组与会议组织者、会议演讲者与布道师。Johannes一直在不遗余力地将敏捷原则应用到大型软件项目中,不过他真正感...

殊麒
2013/12/27
19.2K
69
创建自己的Spring Boot starter

Spring Boot starter 的组件 autoconfigure starter autoconfigure模块 包含自动配置的代码 starter模块 包含autoconfigure模块所依赖的包以及通用的包 命名 不要以 spring-boot 开头 xxx-sp...

666B
2017/10/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

开源 serverless 产品原理剖析(二) - Fission

背景 本文是开源 serverless 产品原理剖析系列文章的第二篇,关于 serverless 背景知识的介绍可参考文章开源 serverless 产品原理剖析(一) - Kubeless,这里不再赘述。 Fission 简介 Fiss...

阿里云官方博客
5分钟前
0
0
Android面试整理(附答案)

面试,无非都是问上面这些问题(挺多的 - -!),聘请中高级的安卓开发会往深的去问,并且会问一延伸二。以下我先提出几点重点,是面试官基本必问的问题,请一定要去了解! 基础知识 – 四大组...

终端研发部
10分钟前
1
0
Vue 改变数组触发视图更新

Vue 改变数组触发视图更新 以下方法调用会改变原始数组 push(), pop(), shift(), unshift(), splice(), sort(), reverse()push()push() 方法可向数组的末尾添加一个或多个元素,并返回新的...

不负好时光
15分钟前
0
0
计算机系统要素 C5

本章值得一提的是组织计算机的结构。Hack 的指令和数据是分开存储的,因此它的 CPU 有两个 input: IN inM[16], // M value input (M = contents of RAM[A]) instruction[16],...

lionets
31分钟前
2
0
SpringSecurity404需要注意的地方

在使用@RequestMapping的时候路径的值如果写为("auth"),虽然用的时候前面加不加"/"没有区别,但是在配置了SpringSecurity的http.authorizeRequests().antMatchers()时就必须要注意了! 🌰1...

百萬馬力
35分钟前
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部