Playframework2的Security使用

利用play.api.mvc.Security的机制,实现一个trait,用于扩展controller的用户认证机制。

该trait需要实现的方法包括:

1. def username(request: RequestHeader) = request.session.get("email")

2. def onUnauthorized(request: RequestHeader) = Results.Redirect(routes.Application.login)

3. def isAuthenticated(f: => String => Request[AnyContent] => Result) = {

Authenticated(username, onUnauthorized) { user =>

Action(request => f(user)(request))

}

}

其中:

1. username定义了一个Function1的对象,用于实现从Session中取得登录成功用户的名称,或者是用户ID,根据实际情况进行修改;主要用于Security.Authenticated方法调用是的第一个参数:

* @tparam A the type of the user info value (e.g. `String` if user info consists only in a user name)

* @param userinfo function used to retrieve the user info from the request header

* @param onUnauthorized function used to generate alternative result if the user is not authenticated

* @param action the action to wrap

def Authenticated[A](

userinfo: RequestHeader => Option[A],

onUnauthorized: RequestHeader => Result)(action: A => EssentialAction): EssentialAction

如果该函数返回的Option对象未定义,将会触发onUnauthorized方法;

2. 主要负责在未找到用户登录认证的情况下,将页面跳转到登录页面;

3. Controller中Action的包装器,注意传入参数的类型定义,是一个层层传递的参数的过程函数,首先是String类型的用户登录凭证(存储于Session当中);其次,是Action常规使用的RequestHeader,最后是返回的Action的Result类型;

通过以上的思路,实现一个trait(特质)的时候,可以将其mixin到Controller中,并用isAuthenticated来包装原有的Action.

trait实现样例:

可以将其放在Application控制器相同的文件当中。

控制器的写法变为:

object Application extends Controller with Secured

原有每个Action的实现,将使用withAuth进行替换:

def listUser = withAuth {
userid =>
implicit request =>
业务代码
}

通过这样的方式在当前的业务代码中,可以直接使用当前登录用户的凭证,userid。

另外,在trait实现的过程中,增加了一个扩展,withUser。它使用withAuth进行包装,在其中实现通过用户登录凭证,从后台获取的完整的用户信息。那么Action的包装就变为:

def listUser = withUser {
user =>
implicit request =>
业务代码
}

这样就可以在业务代码中直接通过user访问到完整的登录用户信息。

时间: 2024-10-16 03:08:28

Playframework2的Security使用的相关文章

Spring Security入门Demo

一.spring Security简介 SpringSecurity,这是一种基于Spring AOP和Servlet过滤器的安全框架.它提供全面的安全性解决方案,同时在Web请求级和方法调用级处理身份确认和授权.在Spring Framework基础上,Spring Security充分利用了依赖注入(DI,Dependency Injection)和面向切面技术. 二.建立工程 参考http://blog.csdn.net/haishu_zheng/article/details/51490

php报错:Warning: Phpinfo() Has Been Disabled For Security Reasons

今天想使用phpinfo函数查看一下服务器上php的相关信息的时候,报了如下错误: Warning: phpinfo() has been disabled for security reasons (出于安全考虑,禁用了phpinfo函数) 这是第一次碰到这种错误,那么如何重新启用phpinfo函数呢? 很简单: 找到php的配置文件php.ini,将phpinfo函数从disable_functions 中移除再重启服务器即可. 版权声明:本文为博主原创文章,未经博主允许不得转载.

CAS 与 Spring Security 3整合配置详解

一般来说,Web 应用的安全性包括用户认证(Authentication)和用户授权(Authorization)两个部分.用户认证指的是验证某个用户是否为系统中的合法主体,也就是说用户能否访问该系统.用户授权指的是验证某个用户是否有权限执行某个操作.在一个系统中,不同用户所具有的权限是不同的.比如对一个文件来说,有的用户只能进行读取,而有的用户可以进行修改.一般来说,系统会为不同的用户分配不同的角色,而每个角色则对应一系列的权限. 对于上面提到的两种应用情景,Spring Security 框

The Security Database on the Server Does Not Have a Computer Account

这两天在做微软App-V应用程序虚拟化的试验,公司需要测试自有C/S架构产品在其上的部署. 搭建过程比较顺利,突然的今天上班后发现App-V Server(域成员服务器)使用域用户登陆时报错: The Security Database on the Server Does Not Have a Computer Account for This Workstation Trust Relationship Google到该问题的解决方法,说不上准确的道理来,比较"有趣",记录下. 微

spring security+mybatis+springMVC构建一个简单的项目

1.引用 spring security ,这是一种基于spring AOP和Servlet的过滤安全框架.它提供全面的安全性解决方案,同时在web请求级和方法的调用级处理身份确认和授权.在spring framework基础上,spring security充分利用了依赖注入(DI,Dependency Injection)和AOP技术. 下面就让我们用一个小的晓得项目来出初步了解Spring Security 的强大功能吧. 2.项目实战    1)项目的技术架构:maven+spring

Spring Security视频地址

1:Spring Security视频 附件为txt文档内含百度云盘的链接,由于视频太大,所以只能分享链接了..... http://pan.baidu.com/share/link?shareid=2726555995&uk=706734182  提取码:60tb 2:Spring Securoty: 链接:http://pan.baidu.com/s/1o6x2sye 密码:fi2x 3:链接: http://pan.baidu.com/s/1pJnylQF 密码: wj6b 4:http:

MySQL安装过程中出现“APPLY security settings错误”的解决方式

***********************************************声明****************************************************** 原创作品,出自 "晓风残月xj" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj). 因为各种原因.可能存在诸多不足,欢迎斧正. *******************************************

Java学习-050-AES256 之 java.security.InvalidKeyException: Illegal key size or default parameters 解决方法

在进行 Java AES 加密测试时,出现如下错误信息: java.security.InvalidKeyException: Illegal key size or default parameters at javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1026) at javax.crypto.Cipher.implInit(Cipher.java:801) at javax.crypto.Cipher.chooseProvider(Cip

spring security oauth2 jwt 认证和资源分离的配置文件(java类配置版)

最近再学习spring security oauth2.下载了官方的例子sparklr2和tonr2进行学习.但是例子里包含的东西太多,不知道最简单最主要的配置有哪些.所以决定自己尝试搭建简单版本的例子.学习的过程中搭建了认证和资源在一个工程的例子,将token存储在数据库的例子等等 .最后做了这个认证和资源分离的jwt tokens版本.网上找了一些可用的代码然后做了一个整理, 同时测试了哪些代码是必须的.可能仍有一些不必要的代码在,欢迎大家赐教. 一.创建三个spring boot 工程,分