package com.rekoe.module.admin; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpSession; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.LockedAccountException; import org.apache.shiro.authz.annotation.RequiresAuthentication; import org.apache.shiro.subject.Subject; import org.apache.shiro.util.ThreadContext; import org.nutz.dao.Cnd; import org.nutz.ioc.loader.annotation.Inject; import org.nutz.ioc.loader.annotation.IocBean; import org.nutz.lang.Lang; import org.nutz.mvc.Mvcs; import org.nutz.mvc.View; import org.nutz.mvc.annotation.At; import org.nutz.mvc.annotation.Attr; import org.nutz.mvc.annotation.By; import org.nutz.mvc.annotation.Filters; import org.nutz.mvc.annotation.Ok; import org.nutz.mvc.view.ForwardView; import org.nutz.mvc.view.ServerRedirectView; import org.nutz.mvc.view.ViewWrapper; import org.nutz.plugins.view.freemarker.FreeMarkerConfigurer; import org.nutz.plugins.view.freemarker.FreemarkerView; import com.rekoe.domain.User; import com.rekoe.domain.Usr; import com.rekoe.exception.IncorrectCaptchaException; import com.rekoe.filter.AuthenticationFilter; import com.rekoe.service.UsrService; /** * @author 科技㊣²º¹³
* 2014年2月3日 下午4:48:45
* http://www.rekoe.com QQ:5382211 */ @IocBean @At("/admin") public class AdminLoginAct { private static final String TEMPLATE_LOGIN = "template/login/login"; @Inject private FreeMarkerConfigurer freeMarkerConfigurer; @Inject private UsrService usrService; @At @Filters(@By(type = AuthenticationFilter.class)) public View login(@Attr("loginToken") AuthenticationToken token, HttpSession session, HttpServletRequest req) { try { Subject subject = SecurityUtils.getSubject(); ThreadContext.bind(subject); subject.login(token); User user = (User) subject.getPrincipal(); Usr usr = usrService.fetch(Cnd.where("usr", "=", user.getName())); if (!Lang.isEmpty(usr)) { switch (usr.getRole()) { case admin: { session.setAttribute("usr", usr); break; } default: break; } } session.setAttribute("me", subject.getPrincipal()); return new ServerRedirectView("/admin/main.rk"); } catch (IncorrectCaptchaException e) { return new ViewWrapper(new FreemarkerView(freeMarkerConfigurer, TEMPLATE_LOGIN), e.getMessage()); } catch (LockedAccountException e) { return new ViewWrapper(new FreemarkerView(freeMarkerConfigurer, TEMPLATE_LOGIN), e.getMessage()); } catch (AuthenticationException e) { return new ViewWrapper(new FreemarkerView(freeMarkerConfigurer, TEMPLATE_LOGIN), Mvcs.getMessage(req, "common.error.login.account")); } catch (Exception e) { return new ViewWrapper(new FreemarkerView(freeMarkerConfigurer, TEMPLATE_LOGIN), e.getMessage()); } } @At @Ok(">>:/user/login.rk") @RequiresAuthentication public void logout() { } @At @Ok("fm:template.front.account.create_user") @RequiresAuthentication public Object register(@Attr("me") User user) { if (Lang.isEmpty(user) || user.isSystem()) { return new ForwardView("/admin/common/unauthorized.rk"); } return null; } }