com.local.ask.controller.spring.LoginController.java Source code

Java tutorial

Introduction

Here is the source code for com.local.ask.controller.spring.LoginController.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.local.ask.controller.spring;

import com.local.ask.form.ForgetUser;
import com.local.ask.form.LoginUser;
import com.local.ask.model.UserTemp;
import javax.servlet.http.HttpServletRequest;
import javax.validation.Valid;
import org.apache.shiro.SecurityUtils;
import org.apache.shiro.authc.AuthenticationException;
import org.apache.shiro.authc.UsernamePasswordToken;
import org.apache.shiro.authz.annotation.RequiresGuest;
import org.apache.shiro.authz.annotation.RequiresUser;
import org.apache.shiro.session.Session;
import org.apache.shiro.subject.Subject;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;

/**
 *
 * @author Olayinka
 */
@Controller
public class LoginController extends BaseController {

    @RequiresGuest
    @RequestMapping(value = "/login", method = RequestMethod.GET)
    public String loadLoginForm(Model m) {
        return "login";
    }

    @RequiresUser
    @RequestMapping(value = "/logout", method = RequestMethod.GET)
    public String loadLogoutForm(Model m) {
        SecurityUtils.getSubject().logout();
        return REDIRECT_HOME;
    }

    @RequiresGuest
    @RequestMapping(value = "/forget", method = RequestMethod.GET)
    public String loadForgetForm(Model m) {
        return "forget";
    }

    @RequiresGuest
    @RequestMapping(value = "/login", method = RequestMethod.POST)
    public String submitLoginForm(@Valid LoginUser loginUser, BindingResult result, Model m,
            HttpServletRequest request) {
        if (!result.hasErrors()) {
            try {
                UserTemp userTemp = new UserTemp(loginUser);
                Subject subject = SecurityUtils.getSubject();
                subject.login(new UsernamePasswordToken(userTemp.getEmail(), userTemp.getPassword(),
                        loginUser.getRememberMe()));
                Session session = subject.getSession(true);
                session.setAttribute("user", userTemp);
                session.setTimeout(24 * 3600000);
                m.addAttribute("message", "Successfully logged in person");
                String referer = request.getHeader("referer");
                if (referer != null && !referer.isEmpty()) {
                    return REDIRECT + referer;
                }
                referer = (String) SecurityUtils.getSubject().getSession().getAttribute("fallback");
                if (referer != null && !referer.isEmpty()) {
                    return REDIRECT + referer;
                }
            } catch (AuthenticationException ex) {
                ex.printStackTrace();
                m.addAttribute("message", "It seems your email is not registered.");
            }
        }
        return "login";
    }

    @RequiresGuest
    @RequestMapping(value = "/forget", method = RequestMethod.POST)
    public String submitForgetForm(@Valid ForgetUser forgetUser, BindingResult result, Model m) {
        if (result.hasErrors()) {
            return "forget";
        }
        m.addAttribute("message", "Successfully saved person: " + forgetUser.toString());
        m.addAttribute("loginUser", new LoginUser());
        return "forget";
    }

}