I'm trying to program with Spring Security, where authorization took place without using a database (just with one user entered into the program) to add the above-mentioned, but poor understanding of Spring Security prevents me from doing this.
It produces the following error:
Context initialization failed java.lang.NoSuchMethodError: org.springframework.beans.factory.annotation.InjectionMetadata.needsRefresh (Lorg/springframework/beans/factory/annotation/InjectionMetadata; Ljava/lang/Class;)Z Exception thrown from LifecycleProcessor on context close java.lang.IllegalStateException: LifecycleProcessor not initialized call 'refresh' before invoking lifecycle methods via the context: Root WebApplicationContext Please help me, what am I doing wrong?
Security Config:
@Configuration @EnableWebSecurity @EnableGlobalMethodSecurity(securedEnabled = true) public class SecurityConfig extends WebSecurityConfigurerAdapter { @Autowired private UserDetailsServiceImpl userDetailsService; @Autowired public void registerGlobalAuthentication(AuthenticationManagerBuilder auth) throws Exception { auth.userDetailsService(userDetailsService); } @Override protected void configure(HttpSecurity http) throws Exception { http.csrf().disable() .authorizeRequests() .antMatchers("/resources/**", "/**").permitAll() .anyRequest().permitAll() .and(); http.formLogin() .loginPage("/login") .loginProcessingUrl("/j_spring_security_check") .failureUrl("/login?error") .usernameParameter("j_username") .passwordParameter("j_password") .permitAll(); http.logout() .permitAll() .logoutUrl("/logout") .logoutSuccessUrl("/login?logout") .invalidateHttpSession(true); } WebConfig:
@Configuration @EnableWebMvc @ComponentScan("com") public class WebAppConfig extends WebMvcConfigurerAdapter { @Override public void addResourceHandlers(ResourceHandlerRegistry registry) { registry.addResourceHandler("/pages/**").addResourceLocations("/pages/"); } @Bean public UserDetailsService getUserDetailsService(){ return new UserDetailsServiceImpl(); } @Bean public UrlBasedViewResolver setupViewResolver() { UrlBasedViewResolver resolver = new UrlBasedViewResolver(); resolver.setPrefix("/pages/"); resolver.setSuffix(".jsp"); resolver.setViewClass(JstlView.class); return resolver; } } Role, User:
@Entity @Table(name="roles") public class Role implements GrantedAuthority { @Id @GeneratedValue(strategy = GenerationType.AUTO) private long id; private String role; public long getId() { return id; } public void setId(long id) { this.id = id; } public String getRole() { return role; } public void setRole(String role) { this.role = role; } protected Role(){} public Role(String name) { role = name; } @ManyToMany(mappedBy = "roles") Set<User> users; public Set<User> getUsers() { return users; } public void setUsers(Set<User> users) { this.users = users; } @Override public String getAuthority() { return getRole(); } } @Entity @Table(name = "users") public class User { @Id @Column(name = "id") @GeneratedValue private Integer id; @Column(name = "username") private String login; @Column(name = "password") private String password; public User(String login, String password) { this.login = login; this.password = password; } public User() { } public String getLogin() { return login; } public void setLogin(String login) { this.login = login; } public String getPassword() { return password; } public void setPassword(String password) { this.password = password; } @ManyToMany @JoinTable(name = "users_roles", joinColumns = {@JoinColumn(name = "user_id")}, inverseJoinColumns = @JoinColumn(name = "role_id")) private Set<Role> roles; public Set<Role> getRoles() { return roles; } public void setRoles(Set<Role> roles) { this.roles = roles; } } UserDetails:
public interface UsersRepository extends CrudRepository<User, Long> { User findByLogin(String username); } @Service public class UserDetailsServiceImpl implements UserDetailsService { @Autowired private UsersRepository userRep; @Override public UserDetails loadUserByUsername(String email) throws UsernameNotFoundException { UserDetails loadedUser; try { User client = userRep.findByLogin(email); loadedUser = new org.springframework.security.core.userdetails.User( client.getLogin(), client.getPassword(), client.getRoles()); } catch (Exception repositoryProblem) { throw new InternalAuthenticationServiceException(repositoryProblem.getMessage(), repositoryProblem); } return loadedUser; } pom.xml
<properties> <spring.mvc>4.0.0.RELEASE</spring.mvc> <javax.servlet>3.0.1</javax.servlet> <jstl.version>1.2</jstl.version> <spring.securiry>3.2.0.RELEASE</spring.securiry> </properties> <dependencies> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-webmvc</artifactId> <version>${spring.mvc}</version> </dependency> <dependency> <groupId>org.springframework</groupId> <artifactId>spring-web</artifactId> <version>${spring.mvc}</version> </dependency> <dependency> <groupId>javax.servlet</groupId> <artifactId>javax.servlet-api</artifactId> <version>${javax.servlet}</version> <scope>provided</scope> </dependency> <dependency> <groupId>jstl</groupId> <artifactId>jstl</artifactId> <version>${jstl.version}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-web</artifactId> <version>${spring.securiry}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-core</artifactId> <version>${spring.securiry}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-config</artifactId> <version>${spring.securiry}</version> </dependency> <dependency> <groupId>org.springframework.security</groupId> <artifactId>spring-security-taglibs</artifactId> <version>${spring.securiry}</version> </dependency> <dependency> <groupId>javax.persistence</groupId> <artifactId>persistence-api</artifactId> <version>1.0</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-core</artifactId> <version>3.3.2.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-annotations</artifactId> <version>3.3.1.GA</version> </dependency> <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-commons-annotations</artifactId> <version>3.3.0.ga</version> </dependency> <dependency> <groupId>org.springframework.data</groupId> <artifactId>spring-data-jpa</artifactId> <version>2.0.6.RELEASE</version> </dependency> </dependencies> <build> <finalName>webapp</finalName> <plugins> <plugin> <artifactId>maven-compiler-plugin</artifactId> <configuration> <source>1.7</source> <target>1.7</target> </configuration> </plugin> </plugins> </build>
@ComponentScan("com")and provide the build script with the dependencies and their versions - Yuriy SPb ♦hibernateanddata- Yuriy SPb ♦