Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java spring boot是否提供标准的登录和注册支持_Java_Spring_Spring Security_Spring Boot - Fatal编程技术网

Java spring boot是否提供标准的登录和注册支持

Java spring boot是否提供标准的登录和注册支持,java,spring,spring-security,spring-boot,Java,Spring,Spring Security,Spring Boot,我找到了一些关于Spring Security登录和注册的教程: 然而,我现在使用的是springboot,我也想找到一个关于这个的教程。问题是,我只能找到OAuth2和SSO (第28点) 如果我想用springboot实现一个简单的登录和注册表单,你知道如何继续吗 编辑: 我在官方文件中找到了。这将实现登录功能,但注册又如何呢?您需要一个userdetails服务来存储和接收userdetails,当然,至少需要一个服务来实际存储用户 例如,此服务: @Service public cl

我找到了一些关于
Spring Security
登录和注册的教程:

然而,我现在使用的是
springboot
,我也想找到一个关于这个的教程。问题是,我只能找到
OAuth2
SSO

(第28点)

如果我想用
springboot
实现一个简单的登录和注册表单,你知道如何继续吗

编辑:
我在官方文件中找到了。这将实现登录功能,但注册又如何呢?

您需要一个userdetails服务来存储和接收userdetails,当然,至少需要一个服务来实际存储用户

例如,此服务:

@Service
public class RegistrationService {

    @Resource
    private MailService mailer;
    @Resource
    private UserDataService userDataService;

    public boolean createRegistration(RegistryCredentials credentials,
            MessageContext context) {
        String username = credentials.getUsername();
        UserData current = new UserData();
        if (userDataService.isAvailable(username)) {
            userDataService.addUserData(username, current);
            return true;
        } else {
            context.addMessage(new MessageBuilder().error().source("username")
                    .code("username.exists").build());
            return false;
        }

    }

    public void saveUserData(RegistryCredentials credentials) {
        UserData current = userDataService.getUserData(credentials
                .getUsername());
        current.setCity(credentials.getCity());
        current.setEmail(credentials.getEmail());
        current.setPassword(credentials.getPassword());
        current.setStreet(credentials.getStreet());
        current.setFirstname(credentials.getFirstname());
        current.setLastname(credentials.getLastname());
        current.setUsername(credentials.getUsername());
        current.setRegistered(new Date());
        Long activationKey = userDataService.updateUserData(current);
        mailer.sendSubscriptionEmail(current, activationKey);
    }

}
RegistryCredentials是包含用户数据字段和验证注释的标准bean。 您在registrationpage上创建registryCredentials,将其签入服务,服务将创建(并保存)用户详细信息。
当然,您必须向SpringSecurity注册您自己的服务实现,因此在安全配置中需要:

@Autowired
public void configureGlobal(AuthenticationManagerBuilder auth,
        UserDataService userDataService) throws Exception {

    auth.userDetailsService(userDataService);
}
对于一个简单的内存解决方案,您可以使用如下UserDataService:

@Service
public class UserDataService implements UserDetailsService {

    private HashMap<String, UserData> userData = new HashMap<>();
    private HashMap<Long, UserData> activation = new HashMap<>();

    public UserDataService() {
        UserData admin = new UserData();
        admin.setUsername("admin");
        admin.setPassword("password");
        admin.setActive(true);
        userData.put("admin", admin);
    }

    public boolean isAvailable(String username) {
        return !userData.containsKey(username);
    }

    public void addUserData(String username, UserData data) {
        userData.put(username, data);
    }

    public UserData getUserData(String username) {
        return userData.get(username);
    }

    public Long updateUserData(UserData changed) {
        userData.put(changed.getUsername(), changed);
        Long random = new SecureRandom().nextLong();
        activation.put(random, changed);
        return random;
    }

    public UserData activateAccount(Long key) {
        return activation.remove(key);

    }

    public boolean mayActivate(Date d, UserData data) {
        long day = 86400000L;
        Date reg = data.getRegistered();
        reg.setTime(reg.getTime() + day);
        if (d.before(reg)) {
            return true;
        } else {
            return false;
        }

    }

    @Override
    public UserDetails loadUserByUsername(String username)
            throws UsernameNotFoundException {
        UserData user = getUserData(username);
        if (user != null) {
            return user;
        }
        throw new UsernameNotFoundException("Username not found");
    }

}
@服务
公共类UserDataService实现UserDetailsService{
私有HashMap userData=newhashmap();
私有HashMap激活=新建HashMap();
公共用户数据服务(){
UserData admin=new UserData();
admin.setUsername(“admin”);
管理员设置密码(“密码”);
admin.setActive(true);
userData.put(“admin”,admin);
}
公共布尔值可用(字符串用户名){
return!userData.containsKey(用户名);
}
public void addUserData(字符串用户名、用户数据){
userData.put(用户名、数据);
}
公共用户数据getUserData(字符串用户名){
返回userData.get(用户名);
}
公共长updateUserData(用户数据已更改){
userData.put(changed.getUsername(),changed);
Long random=new SecureRandom().nextLong();
激活。放置(随机、更改);
返回随机;
}
public UserData activateAccount(长键){
返回激活。移除(键);
}
公共布尔值可激活(日期d,用户数据){
长日=86400000L;
Date reg=data.getRegistered();
reg.setTime(reg.getTime()+天);
如果(d.之前(注册)){
返回true;
}否则{
返回false;
}
}
@凌驾
公共用户详细信息loadUserByUsername(字符串用户名)
抛出UsernameNotFoundException{
UserData user=getUserData(用户名);
如果(用户!=null){
返回用户;
}
抛出新的UsernameNotFoundException(“找不到用户名”);
}
}
重要的是,在这种情况下,
UserData
必须实现
UserDetails
Principal
,安全身份验证才能真正使用它


这个特殊的解决方案创建了一个注册令牌,以便在首次登录之前使用。但是,这是完全可选的,因为您可以根据需要配置登录过程。

回答得非常好,谢谢。我很快就会试试的。虽然这很奇怪,但是没有一个完整的教程来做这些基本的事情。我认为这是可行的。你知道我在哪里可以学到这些吗?在我看来,春天就像一种全新的语言。虽然我知道它不是,但所有这些注释和需要知道使用哪个库和服务…大多数都可以在spring文档中找到。尽管你必须交叉检查不同的主题才能得到你想要的一切。然而,我们在一次研讨会上学习到了这一点。但是,我们的老师在春季文档中向我们展示了一切,所以。。我们不必寻找自己,只需利用提供的资源即可。我也同意,spring实际上几乎是一种新语言,但一旦您了解了模块的基本知识,它是否很容易使用=)