gpt4 book ai didi

play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面

转载 作者:qq735679552 更新时间:2022-09-29 22:32:09 25 4
gpt4 key购买 nike

CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.

这篇CFSDN的博客文章play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.

1、编写SessionFilter.scala代码 。

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package filters
import javax.inject.{Inject, Singleton}
import akka.stream.Materializer
import controllers.routes
import play.api.mvc.{Filter, RequestHeader, Result, Results}
import scala.concurrent.Future
@Singleton
class SessionFilter @Inject ()(implicit val mat: Materializer) extends Filter {
  def apply(nextFilter: RequestHeader => Future[Result])
       (requestHeader: RequestHeader): Future[Result] = {
   if (!requestHeader.session.get( "user" ).isDefined && !requestHeader.path.contains( "/signin" ) && !requestHeader.path.contains( "/assets/" )) {
    Future.successful(Results.Redirect(routes.SignController.showSignin()))
   } else {
    nextFilter(requestHeader)
   }
  }
}

说明:

!requestHeader.session.get("user").isDefined 是用来判断session中是否存在user 。

!requestHeader.path.contains("/signin") 是用来排除登录页面,这个页面不登录也应该是可见的,防止出现死循环跳转 。

!requestHeader.path.contains("/assets/") 是用来排除静态资源文件的,如图片、css、JavaScript等 。

2、在app目录下的Filters.scala中使用SessionFilter 。

Filters.scala这个文件是activator自动生成的模板,要使用SessionFilter只要在里面加上sessionFilter: SessionFilter和Seq(sessionFilter)就可以了 。

?
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
import javax.inject._
import filters.{ExampleFilter, SessionFilter}
import play.api._
import play.api.http.HttpFilters
import play.api.mvc._
/**
  * This class configures filters that run on every request. This
  * class is queried by Play to get a list of filters.
  *
  * Play will automatically use filters from any class called
  * `Filters` that is placed the root package. You can load filters
  * from a different class by adding a `play.http.filters` setting to
  * the `application.conf` configuration file.
  *
  * @param env Basic environment settings for the current application.
  * @param exampleFilter A demonstration filter that adds a header to
  * each response.
  */
@Singleton
class Filters @Inject () (
  env: Environment,
  exampleFilter: ExampleFilter, sessionFilter: SessionFilter) extends HttpFilters {
  override val filters = {
   // Use the example filter if we're running development mode. If
   // we're running in production or test mode then don't use any
   // filters at all.
   if (env.mode == Mode.Dev) Seq(exampleFilter) else Seq.empty
   Seq(sessionFilter)
  }
}

以上所述是小编给大家介绍的play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我网站的支持! 。

原文链接:http://www.cnblogs.com/tangjizhong/archive/2016/11/25/6100654.html 。

最后此篇关于play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面的文章就讲到这里了,如果你想了解更多关于play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com