- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
所有 spring mvc + hibernate + spring security 示例都表明我需要创建 MyUserService 类,该类从 springSecurity 扩展 UserDetailsService 以将我的数据库与 spring security 绑定(bind)。但当我这样做时,我得到:
Error creating bean with name 'webSecurityConfig' no such bean UserSerivce is defined
因为当我尝试将其自动连接到 SecurityConfig 时它还不存在。当我下载任何在线示例时,它都会给我同样的错误。
My project in Git - start_over 分支。
我的 WebSecurityConfig 类:
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private UserService userService;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService).passwordEncoder(passwordEncoder());
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http.authorizeRequests().antMatchers("/login", "/").anonymous()
.antMatchers("/admin", "/admin**").hasRole("ADMIN")
.anyRequest().authenticated()
.and()
.formLogin().loginPage("/login").permitAll()
.and()
.logout().logoutSuccessUrl("/login").permitAll()
.and()
.csrf().disable();
}
@Bean
public PasswordEncoder passwordEncoder() {
return new BCryptPasswordEncoder();
}
}
我的用户服务:
public interface UserService extends UserDetailsService {
void save(User user);
List<User> getAllUsers();
}
我的 UserServiceImpl
@Service
public class UserServiceImp implements UserService{
@Autowired
private UserDao userDao;
@Transactional
public void save(User user) {
userDao.save(user);
}
@Transactional(readOnly = true)
public List<User> getAllUsers() {
return userDao.getAllUsers();
}
@Transactional(readOnly=true)
@Override
public UserDetails loadUserByUsername(final String username)
throws UsernameNotFoundException {
com.rjproject.entities.User user = userDao.findByUserName(username);
List<GrantedAuthority> authorities =
buildUserAuthority(user.getAuthorities());
return buildUserForAuthentication(user, authorities);
}
private org.springframework.security.core.userdetails.User buildUserForAuthentication(com.rjproject.entities.User user,
List<GrantedAuthority> authorities) {
return new org.springframework.security.core.userdetails.User(user.getUsername(), user.getPassword(),
user.isEnabled(), true, true, true, authorities);
}
private List<GrantedAuthority> buildUserAuthority(Set<Authorities> userRoles) {
Set<GrantedAuthority> setAuths = new HashSet<GrantedAuthority>();
// Build user's authorities
for (Authorities userRole : userRoles) {
setAuths.add(new SimpleGrantedAuthority(userRole.getAuthority()));
}
List<GrantedAuthority> Result = new ArrayList<GrantedAuthority>(setAuths);
return Result;
}
}
更新:
我有 RunJob 类,它在启动时创建用户,并且 UserService 在其中 Autowiring ,没有错误。这是:
@Service
public class RunJob implements InitializingBean {
private static final Logger logger = Logger.getLogger(RunJob.class);
@Autowired
private UserService userService;
public void afterPropertiesSet() {
User userA = new User();
userA.setUsername("ARS");
userA.setPassword("ART");
Authorities authorityA = new Authorities();
authorityA.setAuthority("ADMIN");
authorityA.setUser(userA);
Set<Authorities> roles = new HashSet<>();
roles.add(authorityA);
userA.setAuthorities(roles);
userService.save(userA);
logger.info("user " + userA.getUsername() + " " + userA.getPassword() + " is saved with " + authorityA.getAuthority() + " authority");
User userB = new User();
userB.setUsername("John");
userB.setPassword("Doe");
Authorities authorityB = new Authorities();
authorityB.setAuthority("USER");
authorityB.setUser(userB);
roles.clear();
roles.add(authorityB);
userB.setAuthorities(roles);
userService.save(userB);
logger.info("user " + userB.getUsername() + " " + userB.getPassword() + " is saved with " + authorityB.getAuthority() + " authority");
}
}
当我下载任何在线示例时,我收到完全相同的错误。 SpringSecurity 本身的一些东西。UPD2:这是所有配置类。
webMvcConfig
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = {"com.rjproject"})
public class WebMvcConfig implements WebMvcConfigurer {
@Autowired
private ApplicationContext applicationContext;
@Bean
public SpringResourceTemplateResolver templateResolver() {
SpringResourceTemplateResolver templateResolver = new SpringResourceTemplateResolver();
templateResolver.setApplicationContext(applicationContext);
templateResolver.setPrefix("/WEB-INF/templates/");
templateResolver.setSuffix(".html");
templateResolver.setTemplateMode(TemplateMode.HTML);
templateResolver.setCacheable(true);
return templateResolver;
}
@Bean
public SpringTemplateEngine templateEngine() {
SpringTemplateEngine templateEngine = new SpringTemplateEngine();
templateEngine.setTemplateResolver(templateResolver());
templateEngine.setEnableSpringELCompiler(true);
return templateEngine;
}
@Bean
public ViewResolver viewResolver() {
ThymeleafViewResolver viewResolver = new ThymeleafViewResolver();
viewResolver.setTemplateEngine(templateEngine());
return viewResolver;
}
@Override
public void addResourceHandlers(final ResourceHandlerRegistry registry) {
registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
}
}
Web应用程序初始化
public class WebAppInit extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class[] { HibernateConfig.class, WebSecurityConfig.class};
}
@Override
protected Class<?>[] getServletConfigClasses() {
return new Class[] { WebMvcConfig.class};
}
@Override
protected String[] getServletMappings() {
return new String[]{"/"};
}
}
最佳答案
如果您的项目有多个配置类,就像我的有 WebMvcConfig
和 WebSecurityConfig
您应该定义注释 @ComponentScan(basePackages = {"com.rjproject"})
对于每个配置类。
关于java - 创建名为 'webSecurityConfig' 的 bean 时出错,因为当我尝试将 UserService Bean Autowiring 到 WebSecurityConfig 中时,它不存在,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55114827/
所有 spring mvc + hibernate + spring security 示例都表明我需要创建 MyUserService 类,该类从 springSecurity 扩展 UserDet
我正在为我的学习构建一个网络应用程序。该应用程序将由单个管理员管理,该管理员可以注册组织,以便其员工可以使用它。 我已经有一个有效的 WebSecurityConfiguration,它将每个未经身份
我需要创建一个 WebSecurityConfig 来处理过滤器。我希望每个请求都传递到过滤器,除了在路径上具有“身份验证”的请求之外。这就是我正在尝试做的事情: @Configuration @En
我用过 Spring Security 的 WebSecurityConfig到管理员权限。 并且权限只在 spring 应用程序启动时加载一次。 那么如何手动重新加载 WebSecurityConf
我们从安全角度维护我们应用程序的两个版本 1. SAML based spring security 2. Spring and JDBC based application security. 由于
我正在开发一个 Spring Boot 项目和用于 session 控制的 WebSecurityConfig。问题是,当 session 过期时,我被重定向到 /?sessionexpired ,而
我通常不会在这里发帖,但当我发帖时,这意味着我遇到了大麻烦:)。 所以我有一个使用 filezilla 部署的 .war 文件。我使用一台运行 ubuntu 的远程服务器。因此有一次,我决定在服务器没
我在项目中使用 Spring Security 实现了 LDAP 身份验证和授权。我配置了 spring-security.xml 并让它运行。我正在尝试使用 Java (WebSecurityCon
我正在尝试运行连接到远程 MySQL 服务器的 Spring Boot 应用程序。我在启动时遇到异常: Caused by: java.lang.IllegalStateException: @Ord
我正在尝试运行连接到远程 MySQL 服务器的 Spring Boot 应用程序。我在启动时遇到异常: Caused by: java.lang.IllegalStateException: @Ord
我是一名优秀的程序员,十分优秀!