首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > .NET Framework >

Play! Framework 学习札记 — 注解

2012-11-16 
Play! Framework 学习笔记 — 注解Interceptions拦截器注解:@Before所有访问的Action执行之前调用该方法,比

Play! Framework 学习笔记 — 注解
Interceptions拦截器注解:
@Before
所有访问的Action执行之前调用该方法,比如:

public class Admin extends Application {     @Before    static void checkAuthentification() {        if(session.get("user") == null) login();    }     public static void index() {        List<User> users = User.findAll();        render(users);    }     ... }


如果需要忽略某一个请求路径,可以添加unless参数:
public class Admin extends Application {     @Before(unless="login")    static void checkAuthentification() {        if(session.get("user") == null) login();    }     public static void index() {        List<User> users = User.findAll();        render(users);    }     ... }


如果只希望截获某些请求路径,可以添加only参数:
public class Admin extends Application {     @Before(only={"login","logout"})    static void doSomething() {  ...  }   ...}


当希望夸类实现多个拦截器,可以通过@With注解实现:
先定义第一个拦截器:
public class Secure extends Controller {        @Before    static void checkAuthenticated() {        if(!session.containsKey("user")) {            unAuthorized();        }    }} 


接着在另一个类再定义一个拦截器:
@With(Secure.class)public class Admin extends Application {        ...     }


如果希望对Controller的每个方法执行完时进行拦截:
public class Admin extends Application {     @After    static void log() {        Logger.info("Action executed ...");    }     public static void index() {        List<User> users = User.findAll();        render(users);    }     ... }


如果希望当Controller的每个Action抛出异常时进行拦截,可以使用@Catch:
public class Admin extends Application {    @Catch(IllegalStateException.class)    public static void logIllegalState(Throwable throwable) {        Logger.error("Illegal state %s…", throwable);    }        public static void index() {        List<User> users = User.findAll();        if (users.size() == 0) {            throw new IllegalStateException("Invalid database - 0 users");        }        render(users);    }}


如果希望当Controller的每个Action结果都产生后进行拦截,可以使用@Finally:
public class Admin extends Application {     @Finally    static void log() {        Logger.info("Response contains : " + response.out);    }     public static void index() {        List<User> users = User.findAll();        render(users);    }     ... }

热点排行