play for scala 实现SessionFilter 过滤未登录用户跳转到登录页面
一、编写SessionFilter.scala代码
packagefilters importjavax.inject.{Inject,Singleton} importakka.stream.Materializer importcontrollers.routes importplay.api.mvc.{Filter,RequestHeader,Result,Results} importscala.concurrent.Future @Singleton classSessionFilter@Inject()(implicitvalmat:Materializer)extendsFilter{ defapply(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等
二、在app目录下的Filters.scala中使用SessionFilter
Filters.scala这个文件是activator自动生成的模板,要使用SessionFilter只要在里面加上sessionFilter:SessionFilter和Seq(sessionFilter)就可以了
importjavax.inject._ importfilters.{ExampleFilter,SessionFilter} importplay.api._ importplay.api.http.HttpFilters importplay.api.mvc._ /** *Thisclassconfiguresfiltersthatrunoneveryrequest.This *classisqueriedbyPlaytogetalistoffilters. * *Playwillautomaticallyusefiltersfromanyclasscalled *`Filters`thatisplacedtherootpackage.Youcanloadfilters *fromadifferentclassbyaddinga`play.http.filters`settingto *the`application.conf`configurationfile. * *@paramenvBasicenvironmentsettingsforthecurrentapplication. *@paramexampleFilterAdemonstrationfilterthataddsaheaderto *eachresponse. */ @Singleton classFilters@Inject()( env:Environment, exampleFilter:ExampleFilter,sessionFilter:SessionFilter)extendsHttpFilters{ overridevalfilters={ //Usetheexamplefilterifwe'rerunningdevelopmentmode.If //we'rerunninginproductionortestmodethendon'tuseany //filtersatall. if(env.mode==Mode.Dev)Seq(exampleFilter)elseSeq.empty Seq(sessionFilter) } }
以上所述是小编给大家介绍的playforscala实现SessionFilter过滤未登录用户跳转到登录页面,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对毛票票网站的支持!