// Path: src/main/java/social/roo/enums/UserRole.java
// public enum UserRole {
// 
//     GUEST(0, "游客"),
//     MEMBER(1, "注册会员-所有注册用户自动属于该角色"),
//     VIP(2, "VIP会员-没有特殊权限，只是一个身份象征"),
//     MODERATOR(3, "版主-可以管理若干个话题下的帖子"),
//     SUPER_MODERATOR(4, "超级版主-可以管理所有话题下的帖子和所有会员"),
//     ADMIN(5, "管理员-享有论坛的最高权限，可以管理整个论坛，设置整个论坛的参数");
// 
//     @Getter
//     private Integer id;
//     @Getter
//     private String  description;
// 
//     UserRole(Integer id, String description) {
//         this.id = id;
//         this.description = description;
//     }
// 
//     public String role(){
//         return this.toString().toLowerCase();
//     }
// 
// }
// 
// Path: src/main/java/social/roo/model/dto/Auth.java
// public class Auth {
// 
//     public static boolean check() {
//         return true;
//     }
// 
//     /**
//      * 验证某个操作的频率
//      *
//      * @param seconds 最近的多少秒内允许操作
//      * @return 返回是否在允许的范围内
//      */
//     public static boolean checkFrequency(long seconds) {
//         Date lastUpdated = Auth.loginUser().getUpdated();
//         Date current     = new Date();
//         long diff        = current.getTime() - lastUpdated.getTime();
//         long diffSeconds = diff / 1000;
//         if (seconds <= diffSeconds) {
//             return true;
//         }
//         return false;
//     }
// 
//     public static User loginUser() {
//         User user = WebContext.request().session().attribute(RooConst.LOGIN_SESSION_KEY);
//         return user;
//     }
// 
//     public static void saveToSession(User user) {
//         WebContext.request().session().attribute(RooConst.LOGIN_SESSION_KEY, user);
//     }
// 
//     public static User getUserByCookie() {
//         String hash = WebContext.request().cookie(RooConst.LOGIN_COOKIE_KEY, "");
//         if (StringKit.isNotBlank(hash)) {
//             Long uid = RooUtils.decodeId(hash);
//             return new User().find(uid);
//         }
//         return null;
//     }
// 
//     public static void saveToCookie(Long uid) {
//         String hash = RooUtils.encodeId(uid);
//         WebContext.response().cookie(RooConst.LOGIN_COOKIE_KEY, hash, 3600 * 7);
//     }
// 
//     public static void logout() {
//         WebContext.request().session().removeAttribute(LOGIN_SESSION_KEY);
//         WebContext.response().removeCookie(RooConst.LOGIN_COOKIE_KEY);
//         WebContext.response().redirect("/");
//     }
// 
// }
// 
// Path: src/main/java/social/roo/model/entity/User.java
// @Table(value = "roo_user", pk = "uid")
// @Data
// public class User extends ActiveRecord {
// 
//     /**
//      * 用户id
//      */
//     private Long    uid;
//     /**
//      *用户名
//      */
//     private String  username;
//     /**
//      * 用户密码
//      */
//     private String  password;
//     /**
//      * 用户邮箱
//      */
//     private String  email;
//     /**
//      *
//      */
//     private String  avatar;
//     /**
//      * 角色
//      */
//     private String  role;
//     /**
//      * 注册时间
//      */
//     private Date    created;
//     /**
//      * 最后一次操作时间
//      */
//     private Date    updated;
//     /**
//      * 最后一次登录时间
//      */
//     private Date    logined;
//     /**
//      * 用户状态 0:未激活 1:正常 2:停用 3:注销
//      */
//     private Integer state;
// 
// }


import com.blade.ioc.annotation.Bean;
import com.blade.ioc.annotation.Inject;
import com.blade.mvc.hook.Signature;
import com.blade.mvc.hook.WebHook;
import com.blade.mvc.http.Request;
import com.blade.mvc.http.Response;
import lombok.extern.slf4j.Slf4j;
import social.roo.annotation.Access;
import social.roo.enums.UserRole;
import social.roo.model.dto.Auth;
import social.roo.model.entity.User;
import java.lang.reflect.Method;
import static social.roo.RooConst.LOGIN_SESSION_KEY;
package social.roo.hooks;




/**
 * 登录权限验证中间件
 *
 * @author biezhi
 * @date 2017/8/6
 */
@Slf4j
@Bean
// Path: src/main/java/social/roo/enums/UserRole.java
// public enum UserRole {
// 
//     GUEST(0, "游客"),
//     MEMBER(1, "注册会员-所有注册用户自动属于该角色"),
//     VIP(2, "VIP会员-没有特殊权限，只是一个身份象征"),
//     MODERATOR(3, "版主-可以管理若干个话题下的帖子"),
//     SUPER_MODERATOR(4, "超级版主-可以管理所有话题下的帖子和所有会员"),
//     ADMIN(5, "管理员-享有论坛的最高权限，可以管理整个论坛，设置整个论坛的参数");
// 
//     @Getter
//     private Integer id;
//     @Getter
//     private String  description;
// 
//     UserRole(Integer id, String description) {
//         this.id = id;
//         this.description = description;
//     }
// 
//     public String role(){
//         return this.toString().toLowerCase();
//     }
// 
// }
// 
// Path: src/main/java/social/roo/model/dto/Auth.java
// public class Auth {
// 
//     public static boolean check() {
//         return true;
//     }
// 
//     /**
//      * 验证某个操作的频率
//      *
//      * @param seconds 最近的多少秒内允许操作
//      * @return 返回是否在允许的范围内
//      */
//     public static boolean checkFrequency(long seconds) {
//         Date lastUpdated = Auth.loginUser().getUpdated();
//         Date current     = new Date();
//         long diff        = current.getTime() - lastUpdated.getTime();
//         long diffSeconds = diff / 1000;
//         if (seconds <= diffSeconds) {
//             return true;
//         }
//         return false;
//     }
// 
//     public static User loginUser() {
//         User user = WebContext.request().session().attribute(RooConst.LOGIN_SESSION_KEY);
//         return user;
//     }
// 
//     public static void saveToSession(User user) {
//         WebContext.request().session().attribute(RooConst.LOGIN_SESSION_KEY, user);
//     }
// 
//     public static User getUserByCookie() {
//         String hash = WebContext.request().cookie(RooConst.LOGIN_COOKIE_KEY, "");
//         if (StringKit.isNotBlank(hash)) {
//             Long uid = RooUtils.decodeId(hash);
//             return new User().find(uid);
//         }
//         return null;
//     }
// 
//     public static void saveToCookie(Long uid) {
//         String hash = RooUtils.encodeId(uid);
//         WebContext.response().cookie(RooConst.LOGIN_COOKIE_KEY, hash, 3600 * 7);
//     }
// 
//     public static void logout() {
//         WebContext.request().session().removeAttribute(LOGIN_SESSION_KEY);
//         WebContext.response().removeCookie(RooConst.LOGIN_COOKIE_KEY);
//         WebContext.response().redirect("/");
//     }
// 
// }
// 
// Path: src/main/java/social/roo/model/entity/User.java
// @Table(value = "roo_user", pk = "uid")
// @Data
// public class User extends ActiveRecord {
// 
//     /**
//      * 用户id
//      */
//     private Long    uid;
//     /**
//      *用户名
//      */
//     private String  username;
//     /**
//      * 用户密码
//      */
//     private String  password;
//     /**
//      * 用户邮箱
//      */
//     private String  email;
//     /**
//      *
//      */
//     private String  avatar;
//     /**
//      * 角色
//      */
//     private String  role;
//     /**
//      * 注册时间
//      */
//     private Date    created;
//     /**
//      * 最后一次操作时间
//      */
//     private Date    updated;
//     /**
//      * 最后一次登录时间
//      */
//     private Date    logined;
//     /**
//      * 用户状态 0:未激活 1:正常 2:停用 3:注销
//      */
//     private Integer state;
// 
// }


// Path: src/main/java/social/roo/hooks/AuthHook.java
import com.blade.ioc.annotation.Bean;
import com.blade.ioc.annotation.Inject;
import com.blade.mvc.hook.Signature;
import com.blade.mvc.hook.WebHook;
import com.blade.mvc.http.Request;
import com.blade.mvc.http.Response;
import lombok.extern.slf4j.Slf4j;
import social.roo.annotation.Access;
import social.roo.enums.UserRole;
import social.roo.model.dto.Auth;
import social.roo.model.entity.User;
import java.lang.reflect.Method;
import static social.roo.RooConst.LOGIN_SESSION_KEY;

package social.roo.hooks;




/**
 * 登录权限验证中间件
 *
 * @author biezhi
 * @date 2017/8/6
 */
@Slf4j
@Bean
public class AuthHook implements WebHook {