我已经在我的项目上实现了Spring Security。但是如果我在@Service上实现UserDetailsService,则忽略方法安全注释。 这段代码有什么问题?
@Transactional
public interface UserService extends UserDetailsService {
@PreAuthorize("hasRole('ROLE_SUPER')") /* it's ignored. */
void update(UserEditForm form);
@Override
User loadUserByUsername(String username) throws UsernameNotFoundException;
}
@Service
public class SimpleUserService implements UserService {
// ommitted
}
@Transactional
public interface SomeService{
@PreAuthorize("hasRole('ROLE_SUPER')") /* it's working fine */
void doSomething();
}
@Service
public class SimpleSomeService implements SomeService {
// ommitted
}
@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
PasswordEncoder passwordEncoder;
@Autowired
UserService userService;
@Override
protected void configure(AuthenticationManagerBuilder auth) throws Exception {
auth.userDetailsService(userService).passwordEncoder(passwordEncoder);
}
// ommitted
}
ps:抱歉,我没有足够的英语知识。
答案 0 :(得分:0)
您需要在SimpleUserService中进行更改
@Service("simpleUserService")
public class SimpleUserService implements UserService {
// ommitted
}
在SecurityConfig中,使用@Qualifier自动装配UserService(“simpleUserService”)
@Autowired
@Qualifier("simpleUserService")
UserService userService;
答案 1 :(得分:0)
不要使用Spring注释(@Component
,@Service
,@Transactional
,@Repository
注释接口,在实现类上添加注释。
删除@Transactional
界面上的UserService
,创建新课程UserServiceImpl
并添加注释@Transactional
。
并将@PreAuthorize("hasRole('ROLE_SUPER')")
注释移到实现方法上。