// Path: summer-demo/src/main/java/org/smartx/summer/bean/LoginDTO.java
// public class LoginDTO {
// 
//     @NotBlank
//     @Size(min = 1, max = 15)
//     private String userPhone;
// 
//     @NotBlank
//     @Size(min = 6, max = 20)
//     private String password;
// 
// 
//     public String getUserPhone() {
//         return userPhone;
//     }
// 
//     public void setUserPhone(String userPhone) {
//         this.userPhone = userPhone;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     @Override
//     public String toString() {
//         return "LoginDTO{" +
//                 "password='" + password + '\'' +
//                 ", userPhone='" + userPhone +
//                 '}';
//     }
// }
// 
// Path: summer-core/src/main/java/org/smartx/summer/session/SessionManager.java
// public interface SessionManager {
// 
//     /**
//      * 设置 session
//      *
//      * @param key
//      * @param sessionUser
//      */
//     void setSessionUser(String key, SessionUser sessionUser);
// 
//     /**
//      * 设置 session 中指定的 field
//      *
//      * @param key
//      * @param field
//      * @param value
//      */
//     void setSessionField(String key, String field, String value);
// 
//     /**
//      * 删除 session 中 指定的 field
//      *
//      * @param key
//      * @param field
//      * @return
//      */
//     Boolean delSessionField(String key, String field);
// 
//     /**
//      * 获取 session 中指定 field 的值
//      *
//      * @param key
//      * @param field
//      * @return
//      */
//     String getSessionField(String key, String field);
// 
//     /**
//      * 判断key是否过期
//      *
//      * @param key
//      * @return
//      */
//     boolean isExistSessionKey(String key);
// 
//     /**
//      * 判断指定 session 中是否存在某个 field
//      *
//      * @param key
//      * @param field
//      * @return
//      */
//     boolean isExistSessionField(String key, String field);
// 
//     /**
//      * 设置 session 超时的时间
//      *
//      * @param key
//      * @param seconds
//      * @return
//      */
//     boolean setSessionExpire(String key, int seconds);
// 
//     /**
//      * 获取 session user
//      *
//      * @param key
//      * @return
//      */
//     Map<String, String> getSessionUser(String key);
// 
//     /**
//      * 删除 session
//      *
//      * @param key
//      */
//     void deleteSessionByKey(String key);
// 
//     /*
//     /**
//      * 正则匹配获取 keys
//      */
//     //TreeSet<String> getKeysByPattern(String regrex);
// 
// }


import com.alibaba.fastjson.JSONObject;
import org.smartx.summer.annotation.VerifyJwtRole;
import org.smartx.summer.bean.LoginDTO;
import org.smartx.summer.session.SessionManager;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;
package org.smartx.summer.controller;




/**
 * Created by Ming on 2016/10/27.
 *
 * @author Ming
 */
@RestController
public class HelloController {

    @Resource
    private SessionManager sessionManager;

    @GetMapping(value = "/")
    public String summer() {
        return "Hello Summer";
    }

    @VerifyJwtRole(roles = "user,admin", verifyJwt = true)
    @GetMapping(path = "/test-annotation")
    public ResponseEntity<?> version() {
        return new ResponseEntity<>(HttpStatus.OK);
    }

    @DeleteMapping(value = "/api/1")
    public ResponseEntity<?> delete() {
        return new ResponseEntity<>(HttpStatus.OK);
    }

    @GetMapping("/test/{value}")
    public ResponseEntity<?> get2(@PathVariable("value") String value) {
        System.out.println("-----------" + value);
        return ResponseEntity.ok(value);
    }

    @PutMapping("api/post")
    public ResponseEntity<?> post(@RequestBody LoginDTO loginDTO, HttpServletRequest request) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("id", 1);
        return ResponseEntity.ok(jsonObject);
    }

    @PutMapping("api/put")
// Path: summer-demo/src/main/java/org/smartx/summer/bean/LoginDTO.java
// public class LoginDTO {
// 
//     @NotBlank
//     @Size(min = 1, max = 15)
//     private String userPhone;
// 
//     @NotBlank
//     @Size(min = 6, max = 20)
//     private String password;
// 
// 
//     public String getUserPhone() {
//         return userPhone;
//     }
// 
//     public void setUserPhone(String userPhone) {
//         this.userPhone = userPhone;
//     }
// 
//     public String getPassword() {
//         return password;
//     }
// 
//     public void setPassword(String password) {
//         this.password = password;
//     }
// 
//     @Override
//     public String toString() {
//         return "LoginDTO{" +
//                 "password='" + password + '\'' +
//                 ", userPhone='" + userPhone +
//                 '}';
//     }
// }
// 
// Path: summer-core/src/main/java/org/smartx/summer/session/SessionManager.java
// public interface SessionManager {
// 
//     /**
//      * 设置 session
//      *
//      * @param key
//      * @param sessionUser
//      */
//     void setSessionUser(String key, SessionUser sessionUser);
// 
//     /**
//      * 设置 session 中指定的 field
//      *
//      * @param key
//      * @param field
//      * @param value
//      */
//     void setSessionField(String key, String field, String value);
// 
//     /**
//      * 删除 session 中 指定的 field
//      *
//      * @param key
//      * @param field
//      * @return
//      */
//     Boolean delSessionField(String key, String field);
// 
//     /**
//      * 获取 session 中指定 field 的值
//      *
//      * @param key
//      * @param field
//      * @return
//      */
//     String getSessionField(String key, String field);
// 
//     /**
//      * 判断key是否过期
//      *
//      * @param key
//      * @return
//      */
//     boolean isExistSessionKey(String key);
// 
//     /**
//      * 判断指定 session 中是否存在某个 field
//      *
//      * @param key
//      * @param field
//      * @return
//      */
//     boolean isExistSessionField(String key, String field);
// 
//     /**
//      * 设置 session 超时的时间
//      *
//      * @param key
//      * @param seconds
//      * @return
//      */
//     boolean setSessionExpire(String key, int seconds);
// 
//     /**
//      * 获取 session user
//      *
//      * @param key
//      * @return
//      */
//     Map<String, String> getSessionUser(String key);
// 
//     /**
//      * 删除 session
//      *
//      * @param key
//      */
//     void deleteSessionByKey(String key);
// 
//     /*
//     /**
//      * 正则匹配获取 keys
//      */
//     //TreeSet<String> getKeysByPattern(String regrex);
// 
// }


// Path: summer-demo/src/main/java/org/smartx/summer/controller/HelloController.java
import com.alibaba.fastjson.JSONObject;
import org.smartx.summer.annotation.VerifyJwtRole;
import org.smartx.summer.bean.LoginDTO;
import org.smartx.summer.session.SessionManager;
import org.springframework.http.HttpStatus;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;
import javax.annotation.Resource;
import javax.servlet.http.HttpServletRequest;

package org.smartx.summer.controller;




/**
 * Created by Ming on 2016/10/27.
 *
 * @author Ming
 */
@RestController
public class HelloController {

    @Resource
    private SessionManager sessionManager;

    @GetMapping(value = "/")
    public String summer() {
        return "Hello Summer";
    }

    @VerifyJwtRole(roles = "user,admin", verifyJwt = true)
    @GetMapping(path = "/test-annotation")
    public ResponseEntity<?> version() {
        return new ResponseEntity<>(HttpStatus.OK);
    }

    @DeleteMapping(value = "/api/1")
    public ResponseEntity<?> delete() {
        return new ResponseEntity<>(HttpStatus.OK);
    }

    @GetMapping("/test/{value}")
    public ResponseEntity<?> get2(@PathVariable("value") String value) {
        System.out.println("-----------" + value);
        return ResponseEntity.ok(value);
    }

    @PutMapping("api/post")
    public ResponseEntity<?> post(@RequestBody LoginDTO loginDTO, HttpServletRequest request) {
        JSONObject jsonObject = new JSONObject();
        jsonObject.put("id", 1);
        return ResponseEntity.ok(jsonObject);
    }

    @PutMapping("api/put")
    public ResponseEntity<?> put(@RequestBody LoginDTO loginDTO, HttpServletRequest request) {