Java tutorial
/* * Copyright (C) 2010-2012 Taylor Leese (tleese22@gmail.com) * * This file is part of jappstart. * * jappstart is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * jappstart is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public License * along with jappstart. If not, see <http://www.gnu.org/licenses/>. */ package com.assetmanager.controller; import java.util.Locale; import javax.servlet.http.HttpServletRequest; import javax.validation.Valid; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.context.MessageSource; import org.springframework.security.authentication.encoding.PasswordEncoder; import org.springframework.stereotype.Controller; import org.springframework.ui.ModelMap; import org.springframework.validation.BindingResult; import org.springframework.validation.FieldError; import org.springframework.web.bind.annotation.ModelAttribute; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.SessionAttributes; import org.springframework.web.servlet.LocaleResolver; import com.assetmanager.exception.DuplicateUserException; import com.assetmanager.form.Register; import com.assetmanager.model.auth.UserAccount; import com.assetmanager.service.auth.EnhancedUserDetailsService; import com.assetmanager.service.mail.MailService; /** * The registration controller. */ @Controller @RequestMapping("/register") @SessionAttributes(RegisterController.REGISTER) public class RegisterController { /** * The register form attribute name. */ protected static final String REGISTER = "register"; /** * The password encoder. */ private PasswordEncoder passwordEncoder; /** * The user details service. */ private EnhancedUserDetailsService userDetailsService; /** * The mail service. */ private MailService mailService; /** * The locale resolver. */ private LocaleResolver localeResolver; /** * The message source. */ private MessageSource messageSource; /** * Returns the password encoder. * * @return the password encoder */ public final PasswordEncoder getPasswordEncoder() { return passwordEncoder; } /** * Sets the password encoder. * * @param passwordEncoder the password encoder */ @Autowired public final void setPasswordEncoder(final PasswordEncoder passwordEncoder) { this.passwordEncoder = passwordEncoder; } /** * Gets the user details service. * * @return the user details service */ public final EnhancedUserDetailsService getUserDetailsService() { return userDetailsService; } /** * Sets the user details service. * * @param userDetailsService the user details service */ @Autowired public final void setUserDetailsService(final EnhancedUserDetailsService userDetailsService) { this.userDetailsService = userDetailsService; } /** * Gets the mail service. * * @return the mail service */ public final MailService getMailService() { return mailService; } /** * Sets the mail service. * * @param mailService the mail service */ @Autowired public final void setMailService(final MailService mailService) { this.mailService = mailService; } /** * Gets the locale resolver. * * @return the locale resolver */ public final LocaleResolver getLocaleResolver() { return localeResolver; } /** * Sets the locale resolver. * * @param localeResolver the locale resolver */ @Autowired public final void setLocaleResolver(final LocaleResolver localeResolver) { this.localeResolver = localeResolver; } /** * Gets the message source. * * @return the message source */ public final MessageSource getMessageSource() { return messageSource; } /** * Sets the message source. * * @param messageSource the message source */ @Autowired public final void setMessageSource(final MessageSource messageSource) { this.messageSource = messageSource; } /** * Display the create account form. * * @param model the model map * @return the view name */ @RequestMapping(value = "/create", method = RequestMethod.GET) public final String create(final ModelMap model) { model.addAttribute(REGISTER, new Register()); return "create"; } /** * Activate the account with the given activation key. * * @param key the activation key * @param modelMap the model map * @return the view name */ @RequestMapping(value = "/activate/{key}", method = RequestMethod.GET) public final String activate(@PathVariable("key") final String key, final ModelMap modelMap) { final boolean status = userDetailsService.activateUser(key); if (!status) { modelMap.put("error", true); } return "activate"; } /** * Handle the create account form submission. * * @param register the register form bean * @param binding the binding result * @param request the HTTP servlet request * @return the path */ @RequestMapping(value = "/create", method = RequestMethod.POST) public final String submit(@ModelAttribute(REGISTER) @Valid final Register register, final BindingResult binding, final HttpServletRequest request) { final Locale locale = localeResolver.resolveLocale(request); if (binding.hasErrors()) { return "create"; } final UserAccount user = new UserAccount(register.getUsername()); user.setDisplayName(register.getDisplayName()); user.setEmail(register.getEmail()); user.setPassword(passwordEncoder.encodePassword(register.getPassword(), user.getSalt())); try { userDetailsService.addUser(user, locale); } catch (DuplicateUserException e) { binding.addError(new FieldError(REGISTER, "username", messageSource.getMessage("create.error.username", null, locale))); return "create"; } return "redirect:/register/success"; } }