当前位置: 首页 > 知识库问答 >
问题:

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

方茂
2023-03-14

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

http://www.baeldung.com/spring-security-login-error-handing-localization

如果我想用spring boot实现一个简单的登录和注册表单,有什么想法吗?

编辑:我在官方文档中找到了这个。这将完成登录功能,但注册呢?

共有1个答案

曹原
2023-03-14

您需要一个UserDetailsService来存储和接收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);
}
@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");
    }

}

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

 类似资料:
  • 我按照这些文档在。 https://stripe.com/docs/connect/standard-accounts 我已经使用Stripe提供的入职流程,成功创建了该帐户,并按照文档建议收集了所有必需的信息。 我希望有一个按钮,用户可以使用它从我的应用程序快速访问他们的Stirpe仪表板(实际仪表板,而不是入职流程)。 我找到了这些文件:https://stripe.com/docs/api/

  • 如果你已有幕布,直接登录即可。如果还没有账号,可以使用手机号码注册幕布账号,也可以通过QQ、微信直接注册并登录。 注:微信登录方式需要手机上安装有微信。 账号设置与绑定 登录幕布后,点左上角的头像或者轻按屏幕从左往右滑动,选择「应用设置 - 账号设置」。在这里可以修改头像和昵称,设置密码,绑定手机号码、微信、QQ账号。 注: 绑定手机后才可以设置账号密码,手机号即为账号。 解除绑定需要在电脑上登录

  • 在首页点击注册进入注册页面,你可以使用手机号码注册幕布账号,也可以通过QQ、微信账户直接创建账号并登录。 账号设置与绑定 登录幕布后,点击右上角处用户头像,在下拉菜单中选择「账号设置」。在这里可以修改头像和昵称,设置密码,绑定手机号码、微信、QQ账号,查看账号是否为高级版以及高级版到期时间。 注: 绑定手机后才可以设置账号密码,手机号即为账号。 解绑最后一个登录方式后,账号将无法登录,请注意将文档

  • 注册 / 登录 1.注册 注册入口: 访问 http://www.aikf.com/ 点击右上角注册按钮 输入注册手机号、图形验证码、手机验证码等进行注册 其他注册入口:手机登录http:/www.aikf.com/ 爱客服官方微信公众号注册:点击立即注册 2.登录 登录入口: 访问http://www.aikf.com/ 点击登录 输入用户名及登录密码,点击登录(见下图) 2.修改密码 在登录入

  •        外业精灵启动的时候,会弹出账号登陆。账号为图新账号,可通用于中科图新旗下所有产品,包括:外业精灵、LSV、wish3D Earth等产品。因此,如果有LSV或者wish3D账号的话,则可以直接在外业精灵进行登录。 账号注册        登陆页面,点击快速注册,会转到注册页:        输入手机号,点击获取验证码,会收到注册短信。填写验证码后,输入密码,即可完成注册。      

  • 注册厂商账号 打开浏览器访问注册页面 填写正确的邮箱地址后,点击"获取验证码"按钮,系统将自动发送带有注册验证码的邮件.填写验证码和后续的必要信息后,点击注册按钮,完成注册流程. 登录账号 注册成功后,浏览器将自动跳转到登录页面 填写公司名\密码和验证后.登录