package cn.dreampie.route.interceptor.security;
import cn.dreampie.common.http.HttpRequest;
import cn.dreampie.common.http.HttpResponse;
import cn.dreampie.route.core.RouteInvocation;
import cn.dreampie.route.interceptor.Interceptor;
import cn.dreampie.security.AuthenticateService;
import cn.dreampie.security.Session;
import cn.dreampie.security.SessionBuilder;
import cn.dreampie.security.Subject;
import cn.dreampie.security.builder.BothSessionBuilder;
/**
* Created by wangrenhui on 15/1/2.
*/
public class SecurityInterceptor implements Interceptor {
private final SessionBuilder sessionBuilder;
public SecurityInterceptor(AuthenticateService authenticateService) {
this.sessionBuilder = new BothSessionBuilder(authenticateService);
}
public SecurityInterceptor(SessionBuilder sessionBuilder) {
this.sessionBuilder = sessionBuilder;
}
public void intercept(RouteInvocation ri) {
HttpRequest request = ri.getRouteMatch().getRequest();
HttpResponse response = ri.getRouteMatch().getResponse();
//从cookie/header 构建session
Session oldSession = sessionBuilder.in(request,response);
//检测权限
Subject.check(request.getHttpMethod(), request.getRestPath());
//执行resource
ri.invoke();
//把session 写入cookie/header
sessionBuilder.out(oldSession, response);
}
}