JFinal增加简单权限认证功能

JFinal

JFinal 是基于 Java 语言的极速 WEB + ORM 框架,其核心设计目标是开发迅速、代码量少、学习简单、功能强大、轻量级、易扩展、Restful。在拥有Java语言所有优势的同时再拥有ruby、python、php等动态语言的开发效率!

基于JFinal有shiro权限认证模块。这里使用interceptor和session实现简单的权限认证功能。

Interceptor

每个action请求,都会校验session中是否登录成功。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
public class CommonInterceptor implements Interceptor {

public static List<String> noLoginAction;

public CommonInterceptor() {
noLoginAction = new ArrayList<String>();
noLoginAction.add("/login");
noLoginAction.add("/doLogin");
noLoginAction.add("/logout");
}

public void intercept(Invocation inv) {
Controller controller = inv.getController();
try {
HttpSession session = controller.getSession();
boolean flag = (boolean) (session.getAttribute("islogin") != null ? session.getAttribute("islogin"): false);
if (flag) {
// 登录后调整到首页,不进入login页面
if (IndexController.LOGIN_URL.equals(inv.getActionKey())) {
controller.redirect(IndexController.LOGIN_SUCCESS_URL);
} else {
inv.invoke();
}
} else if (noLoginAction.contains(inv.getActionKey())) {
inv.invoke();
} else {
controller.redirect(IndexController.LOGIN_URL);
}
} catch (Exception e) {
e.printStackTrace();
controller.redirect("/");
}
}
}

Controller

登录时判断用户和密码是否匹配

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
public void login() {
this.render("/auth/login.html");
}
public void doLogin() {
String username = this.getPara("username");
String password = this.getPara("password");
if ("admin".equals(username) && password.equals("admin")) {
setSessionAttr("islogin", true);
}
this.redirect("/");
}
public void logout() {
setSessionAttr("islogin", false);
this.redirect(LOGIN_URL);
}

Config

在Config中增加Interceptor

1
2
3
4
5
6
/**
* 配置全局拦截器
*/
public void configInterceptor(Interceptors me) {
me.add(new CommonInterceptor());
}