package com.jspxcms.core.web.fore;
import static com.jspxcms.core.security.CmsAuthenticationFilter.FALLBACK_URL_PARAM;
import static org.apache.shiro.web.filter.authc.FormAuthenticationFilter.DEFAULT_ERROR_KEY_ATTRIBUTE_NAME;
import static org.apache.shiro.web.filter.authc.FormAuthenticationFilter.DEFAULT_USERNAME_PARAM;
import java.util.Map;
import javax.servlet.http.HttpServletRequest;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.servlet.mvc.support.RedirectAttributes;
import com.jspxcms.core.domain.Site;
import com.jspxcms.core.support.Context;
import com.jspxcms.core.support.ForeContext;
/**
* LoginController
*
* @author liufang
*
*/
@Controller
public class LoginController {
public static final String LOGIN_TEMPLATE = "sys_login.html";
public static final String LOGIN_INCLUDE_TEMPLATE = "sys_login_include.html";
public static final String LOGIN_AJAX_TEMPLATE = "sys_login_ajax.html";
@RequestMapping(value = "/login.jspx")
public String login(String fallbackUrl, HttpServletRequest request,
org.springframework.ui.Model modelMap) {
Site site = Context.getCurrentSite(request);
Map<String, Object> data = modelMap.asMap();
ForeContext.setData(data, request);
modelMap.addAttribute(FALLBACK_URL_PARAM, fallbackUrl);
return site.getTemplate(LOGIN_TEMPLATE);
}
@RequestMapping(value = "/login_include.jspx")
public String loginInclude(String fallbackUrl, HttpServletRequest request,
org.springframework.ui.Model modelMap) {
Site site = Context.getCurrentSite(request);
Map<String, Object> data = modelMap.asMap();
ForeContext.setData(data, request);
modelMap.addAttribute(FALLBACK_URL_PARAM, fallbackUrl);
return site.getTemplate(LOGIN_INCLUDE_TEMPLATE);
}
@RequestMapping(value = "/login_ajax.jspx")
public String loginAjax(String fallbackUrl, HttpServletRequest request,
org.springframework.ui.Model modelMap) {
Site site = Context.getCurrentSite(request);
Map<String, Object> data = modelMap.asMap();
ForeContext.setData(data, request);
modelMap.addAttribute(FALLBACK_URL_PARAM, fallbackUrl);
return site.getTemplate(LOGIN_AJAX_TEMPLATE);
}
@RequestMapping(value = "/login.jspx", method = RequestMethod.POST)
public String loginFail(
@RequestParam(DEFAULT_USERNAME_PARAM) String username,
String fallbackUrl, HttpServletRequest request,
RedirectAttributes ra) {
Object errorName = request
.getAttribute(DEFAULT_ERROR_KEY_ATTRIBUTE_NAME);
if (errorName != null) {
ra.addFlashAttribute(DEFAULT_ERROR_KEY_ATTRIBUTE_NAME, errorName);
}
ra.addFlashAttribute(DEFAULT_USERNAME_PARAM, username);
ra.addAttribute(FALLBACK_URL_PARAM, fallbackUrl);
return "redirect:login.jspx";
}
}