我想在没有用户角色的情况下实现Spring Security。我尝试了这个:
我想配置Spring Security以将数据库用于Rest api请求。我尝试了这个:
@Configuration
@EnableWebSecurity
@Import(value= {Application.class, ContextDatasource.class})
@ComponentScan(basePackages= {"org.rest.api.server.*"})
public class ApplicationSecurityConfig extends WebSecurityConfigurerAdapter {
@Autowired
private RestAuthEntryPoint authenticationEntryPoint;
@Autowired
MyUserDetailsService myUserDetailsService;
@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth) throws Exception {
// auth
// .inMemoryAuthentication()
// .withUser("test")
// .password(passwordEncoder().encode("testpwd"))
// .authorities("ROLE_USER");
auth.userDetailsService(myUserDetailsService);
auth.authenticationProvider(authenticationProvider());
}
@Bean
public DaoAuthenticationProvider authenticationProvider() {
DaoAuthenticationProvider authenticationProvider = new DaoAuthenticationProvider();
authenticationProvider.setUserDetailsService(myUserDetailsService);
authenticationProvider.setPasswordEncoder(passwordEncoder());
return authenticationProvider;
}
@Override
protected void configure(HttpSecurity http) throws Exception {
http
.authorizeRequests()
.antMatchers("/securityNone")
.permitAll()
.anyRequest()
.authenticated()
.and()
.httpBasic()
.authenticationEntryPoint(authenticationEntryPoint);
}
@Bean
public PasswordEncoder passwordEncoder() {
return NoOpPasswordEncoder.getInstance();
}
}
服务:
public interface MerchantsService {
public Merchants getCredentials(String login, String pwd) throws Exception;
}
服务实现
@Service
@Qualifier("merchantsService")
@Transactional
public class MerchantsServiceImpl implements MerchantsService {
@Autowired
private EntityManager entityManager;
@Override
public Merchants getCredentials(String login, String pwd) throws Exception {
String hql = "select e from " + Merchants.class.getName() + " e where e.login = ? and e.pwd = ?";
Query query = entityManager.createQuery(hql).setParameter(0, login).setParameter(1, pwd);
Merchants merchants = (Merchants) query.getSingleResult();
return merchants;
}
}
实施:
@Service
public class MyUserDetailsService implements UserDetailsService {
@Autowired
private MerchantsService merchantsService;
@Override
public UserDetails loadUserByUsername(String username) {
Merchants user = merchantsService.getCredentials(username, pwd);
Set<GrantedAuthority> grantedAuthorities = new HashSet<>();
for (Role role : user.getRoles()){
grantedAuthorities.add(new SimpleGrantedAuthority(role.getName()));
}
return new User(user.getUsername(), user.getPassword(), grantedAuthorities);
}
}
我有两个问题:
>
如何将Spring Security与用户角色一起使用?
如何使用用户名和密码验证请求。我看到,public UserDetails loadUserByUsername(字符串用户名)
只能接受用户名。是否有其他方法来实现代码?
由于Spring Security是关于身份验证和授权的。您想自己进行身份验证,也不需要角色。那为什么您使用Spring Security。Spring Security为您提供了进行身份验证和授权的最佳方式,因此应该使用它。因为您已经有了UserDetailsService
的实现。Spring Security本身使用配置的PasswordEncoder
bean进行密码验证。
我正在尝试构建一个基本的REST服务,它使用Spring Security和OAuth2.0身份验证和授权进行安全保护。 我试图限制所涉及的元素,所以我不是复制粘贴依赖于Spring bean、Spring MVC等的Spring Security Oath XML配置,而是直接使用Spring Security Oauth类。 尝试从/oauth/Token获取访问令牌时遇到了一个障碍。我可能缺
现在亚马逊加入了单点登录供应商的行列。它们只支持OAuth2.0。 总而言之,OAuth2.0似乎是获胜的候选者,而不是openid,因为我关心的所有提供者现在都支持oauth。 所以我考虑直接在我的电子商务站点中实现oauth。 Facebook提供了一种完全的服务器端方式,不涉及JavaScripts。 亚马逊没有。 但它都是OAuth2.0,不是吗? 我想实现几个oauth提供程序。其中肯定
我看到的所有解决方案都需要使用。但是,我想在Eclipse之外的单个文件上使用CDT解析器。那有什么办法吗?
问题内容: 我从 JavaEE 6中 了解到,它是可选的。 因此,如果没有 web.xml ,如何告诉应用程序服务器使用Jersey作为JAX-RS规范的实现? 问题答案: 就如何在没有web.xml的情况下实现应用程序配置而言,@AlexNevidomsky的回答是正确的。您在子类上使用注释。 有关部署选项的更多信息,请参见JAX-RS规范-> 2.3发布-> 2.3.2Servlet。 或更常
我试图在不使用Box2D的情况下为libgdx角色(玩家和敌人)实现碰撞检测。正如我所读到的那样,Box2D支持内置碰撞检测,但由于我的游戏不涉及环境中的任何物理因素,因此我不习惯仅为此使用Box2D。 我发现的许多示例通过为此定义一个边界框(矩形)来启用冲突检测,但我正在寻找一个内置的解决方案。
我想在Android Studio中有一个BackgroundService,它每隔几分钟运行一次,检查JSON文件是否被更改。我的问题是如何让服务运行整个时间e。例如,在待机状态下,在启动后&在应用程序启动后。我的意思是,WhatsApp或其他消息应用是如何始终运行任务的?