将Spring安全Java配置添加到Spring配置
我最近正在开发一个spring应用程序,我想将spring安全性添加到我的应用程序中 我有一个简单的页面,其中包含一个像符咒一样工作的登录表单,但是当我想将spring安全配置添加到应用程序时,我得到了一个错误 以下是我的SecurityConfig文件的代码:将Spring安全Java配置添加到Spring配置,spring,spring-security,Spring,Spring Security,我最近正在开发一个spring应用程序,我想将spring安全性添加到我的应用程序中 我有一个简单的页面,其中包含一个像符咒一样工作的登录表单,但是当我想将spring安全配置添加到应用程序时,我得到了一个错误 以下是我的SecurityConfig文件的代码: @Configuration @EnableWebSecurity public class SecurityConfig extends WebSecurityConfigurerAdapter { /*@Autowired pub
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
/*@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("user").password("password").roles("USER");
}*/
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
/*.antMatchers("/infermier*//**").hasRole("INFERMIER")
.antMatchers("/docteur*//**").hasRole("DOCTEUR")
.antMatchers("/user*//**").hasRole("USER")*/
.anyRequest().authenticated()
.and()
.formLogin()
.loginProcessingUrl("/login")
.permitAll();
}
}
下面是日志:
Error invoking ServletContainerInitializer org.springframework.web.SpringServletContainerInitializer
java.lang.NoClassDefFoundError: org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:760)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
at org.glassfish.web.loader.WebappClassLoader.findClass(WebappClassLoader.java:1183)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1728)
at org.glassfish.web.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1611)
at configuration.WebInitializer.getRootConfigClasses(WebInitializer.java:12)
at org.springframework.web.servlet.support.AbstractAnnotationConfigDispatcherServletInitializer.createRootApplicationContext(AbstractAnnotationConfigDispatcherServletInitializer.java:50)
at org.springframework.web.context.AbstractContextLoaderInitializer.registerContextLoaderListener(AbstractContextLoaderInitializer.java:57)
at org.springframework.web.context.AbstractContextLoaderInitializer.onStartup(AbstractContextLoaderInitializer.java:47)
at org.springframework.web.servlet.support.AbstractDispatcherServletInitializer.onStartup(AbstractDispatcherServletInitializer.java:66)
at org.springframework.web.SpringServletContainerInitializer.onStartup(SpringServletContainerInitializer.java:175)
at org.apache.catalina.core.StandardContext.callServletContainerInitializers(StandardContext.java:5997)
at com.sun.enterprise.web.WebModule.callServletContainerInitializers(WebModule.java:774)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:5895)
at com.sun.enterprise.web.WebModule.start(WebModule.java:691)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1041)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:1024)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2278)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1924)
at com.sun.enterprise.web.WebApplication.start(WebApplication.java:139)
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
Startup of context /servicemed failed due to previous errors]]
[2014-08-13T12:57:16.429+0100] [glassfish 4.0] [SEVERE] [AS-WEB-CORE-00175] [javax.enterprise.web.core] [tid: _ThreadID=37 _ThreadName=admin-listener(4)] [timeMillis: 1407931036429] [levelValue: 1000] [[
Exception during cleanup after start failed
org.apache.catalina.LifecycleException: Manager has not yet been started
at org.apache.catalina.session.StandardManager.stop(StandardManager.java:934)
at org.apache.catalina.core.StandardContext.stop(StandardContext.java:6099)
at com.sun.enterprise.web.WebModule.stop(WebModule.java:720)
at org.apache.catalina.core.StandardContext.start(StandardContext.java:5916)
at com.sun.enterprise.web.WebModule.start(WebModule.java:691)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1041)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:1024)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2278)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1924)
at com.sun.enterprise.web.WebApplication.start(WebApplication.java:139)
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
org.apache.catalina.LifecycleException: org.apache.catalina.LifecycleException: java.lang.NoClassDefFoundError: org/springframework/security/config/annotation/web/configuration/WebSecurityConfigurerAdapter
at org.apache.catalina.core.StandardContext.start(StandardContext.java:5920)
at com.sun.enterprise.web.WebModule.start(WebModule.java:691)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:1041)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:1024)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:747)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:2278)
at com.sun.enterprise.web.WebContainer.loadWebModule(WebContainer.java:1924)
at com.sun.enterprise.web.WebApplication.start(WebApplication.java:139)
at org.glassfish.internal.data.EngineRef.start(EngineRef.java:122)
PS:我确实将其添加到MVC初始化器中:
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { AppConfig.class,SecurityConfig.class};
}
@覆盖
受保护类[]getRootConfigClasses(){
返回新类[]{AppConfig.Class,SecurityConfig.Class};
}
确保类路径中有。显然,它在运行时丢失了
在这种情况下,在运行应用程序之前运行
mvn clean install
可以解决问题。java.lang.NoClassDefFoundError。。。这意味着在类路径上找不到名为XYZ的类。添加到您的类路径。@idursun给了我一个解决方案和一个很好的解释,我所做的配置没有任何问题(后来它实际工作了),问题是目标
文件夹被弄乱了,所以我用maven project工具清理了它,然后重新安装了所有东西(使用相同的工具),瞧,一切都很好这是一个错误的maven project打包类型,在我的例子中:
<packaging>pom</packaging>
pom
而不是
<packaging>war</packaging>
战争
我使用maven,spring security config已经存在了,这就是它的实现方式否?我已经在pom.xml(我使用maven)中有spring security config依赖项,我仔细检查了外部库,并在该jar中找到了该类如果您确定所有必要的spring security jar都在war的WEB-INF库中,这可能是因为类路径中还有其他版本的spring security。我只有3.2.4.REALEASE版本,我检查了它。该类在编译时存在,但在运行时找不到。您可能需要检查运行时配置以查明真正的原因。老实说,我不知道怎么做,我正在使用Intellij,您能给我一些提示吗;)我要做的是进入Maven项目窗口,运行clean
,install
生命周期,然后再次尝试运行该项目。天哪,成功了,非常感谢,我花了大约3天的时间。嗨。哦,顺便说一句,你给我的解决方案,刚刚发生了什么?xD如果您不介意的话,可以添加它作为解决方案,并提供更多的解释:D可能target
文件夹被弄乱了,所以请清理它,然后将pom文件中定义的所有内容再次放在一起修复了混乱:)