我有一个带有Rest-Services的Spring MVC服务器后端和一个AngularJS WebFrontend。
我想保证我的春季mvc休息服务,但我想使用java配置..我不知道配置是如何配置的。有人可以帮我弄这个吗 ? 我发现的唯一好的实现是:https://github.com/philipsorst/angular-rest-springsecurity
我使用postgrsDB,并且我在那里存储用户名和密码以及角色,https://github.com/philipsorst/angular-rest-springsecurity示例中的会话令牌只存储在缓存中而不存储在数据库中?
目前我有一个简单的表单登录安全性,这只是用于测试,但我没有使用jsp我只使用spring mvc rest服务和angularjs作为webfrontend ..我怎么能修改我的spring安全代码呢与https://github.com/philipsorst/angular-rest-springsecurity中的示例一样使用oauth2吗?我目前只有春季安全的这两个班级。
@Configuration
@EnableWebMvcSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter{
@Override
public void configure(AuthenticationManagerBuilder auth) throws Exception {
auth
.inMemoryAuthentication()
.withUser("username").password("test").roles("User");
}
}
然后我在我的WebInitializer中注册securityConfig。
public class WebInitializer extends AbstractAnnotationConfigDispatcherServletInitializer {
@Override
protected Class<?>[] getRootConfigClasses() {
return new Class<?>[]{ PersistenceContext.class,AppConfig.class,SecurityConfig.class };
} ....
但是角色和用户名/密码应该存储在数据库中..我必须使用特殊的数据库模式来保证Spring安全性,以便在我的数据库中存储用户名,密码和角色吗?
我可以实现它,以便我只能在其中一个角色中添加@Secured Annotation(或任何其他注释)吗?喜欢@Secured(“UserRole”)
或者基本身份验证更容易吗?我可以通过角色管理进行基本身份验证来保障我的休息服务吗?如果是这样我们可以使用基本的身份验证.. 最好的问候
答案 0 :(得分:0)
为了加载用户,您必须创建一个身份验证管理器并将UserDetailsService连接到该身份验证管理器。以下文档链接概述了身份验证管理器以及相关的核心组件。
http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/#core-services
所以,回答你的第一个问题......
但角色和用户名/密码应存储在数据库中..我必须使用特殊的 用于Spring安全性的数据库模式,用于在我的数据库中存储用户名,密码和角色?
你可以做任何一件事。如果需要,Spring安全性可以为您处理所有数据库端,您只需提供对具有Spring架构设计的JDBC数据源的引用。
和
http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/#appendix-schema
-OR -
您可以通过提供自己的UserDetailsService实现来利用您自己的架构,该实现将从您自己的数据库架构加载。以下是一些可以帮助您开始使用该方法的示例。
<context:component-scan base-package="com.example.security" />
<security:global-method-security secured-annotations="enabled" pre-post-annotations="enabled"/>
<bean id="dao-provider" class="org.springframework.security.authentication.dao.DaoAuthenticationProvider"
p:userDetailsService-ref="myUserDetailsService"
p:passwordEncoder-ref="sha-pw-encoder"
p:saltSource-ref="my-salt-source" />
<bean id="sha-pw-encoder" class="org.springframework.security.authentication.encoding.ShaPasswordEncoder"
p:encodeHashAsBase64="true" />
<bean id="my-salt-source" class="org.springframework.security.authentication.dao.ReflectionSaltSource"
p:userPropertyToUse="salt" />
<security:authentication-manager>
<security:authentication-provider ref="dao-provider"/>
</security:authentication-manager>
最后,提供UserDetailsService的实现,如下所示:
@Component("myUserDetailsService")
public class MyUserDetailsServiceImpl implements UserDetailsService {
//Reference to the spring JPA repository for loading users
private final UserRepository userRepository;
@Autowired
public MyUserDetailsServiceImpl(UserRepository userRepository) {
this.userRepository = userRepository;
}
@Override
@Transactional
public UserDetails loadUserByUsername(String username) throws UsernameNotFoundException {
User user = userRepository.findByName(username);
if (user != null) {
return new UserDetails() {
... //create the user details from the user object
}
} else {
String err = String.format("Failed to find username: %s in local database. Trying other auth mechanisms.", username);
throw new UsernameNotFoundException(err);
}
}
}
...对于你的第二个问题:
我可以实现它,以便我只能添加@Secured Annotation(或任何其他 注释)我的其余一项服务中的角色是什么?喜欢@Secured(&#34; UserRole&#34;)
是的,上面的配置允许您通过配置global-method-security来使用@Secured注释。
最后,是的,默认情况下所有这些仍然会使用基本身份验证,但如果需要,可以重新配置为使用摘要身份验证。我建议您在http://docs.spring.io/spring-security/site/docs/3.2.x/reference/htmlsingle/完整阅读文档,以便真正掌握您尝试做的事情。但是,这应该让你顺利。