11
zhouwei
2019-07-12 143f7be25ff19896e70ffc486999a64a3bc3b76f
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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
package com.safeluck.aaej.app.config
 
import com.safeluck.aaej.app.po.MobileSession
import com.safeluck.aaej.app.service.TokenService
import org.springframework.beans.factory.annotation.Autowired
import org.springframework.core.MethodParameter
import org.springframework.stereotype.Component
import org.springframework.web.bind.support.WebDataBinderFactory
import org.springframework.web.context.request.NativeWebRequest
import org.springframework.web.method.HandlerMethod
import org.springframework.web.method.support.HandlerMethodArgumentResolver
import org.springframework.web.method.support.ModelAndViewContainer
import java.lang.annotation.ElementType
import java.lang.annotation.Retention
import java.lang.annotation.RetentionPolicy
import java.lang.annotation.Target
 
 
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
annotation class AppSession
 
 
 
@Component
class SessionProcessor : HandlerMethodArgumentResolver
{
    @Autowired
    lateinit var tokenService: TokenService
    override fun resolveArgument(methodParameter: MethodParameter, p1: ModelAndViewContainer?, nativeWebRequest: NativeWebRequest, p3: WebDataBinderFactory?): Any? {
        val request = (nativeWebRequest as org.springframework.web.context.request.ServletWebRequest).request
        val token = tokenService.getToken(request)
        val session =  tokenService.getSession(token!!)
        //是否加了允许游客访问标签
        if(session?.userid == null)
        {
            var allowVisitor = methodParameter.method!!.getAnnotation(AllowVisitor::class.java)!=null
                    ||methodParameter.containingClass.getAnnotation(AllowVisitor::class.java)!=null
            if(!allowVisitor) {
                println("userid ==null  401")
                val response = nativeWebRequest.response
                response!!.sendError(401)
                return null
            }
        }
 
        if(session!=null){
            return session
        }
        return MobileSession()
 
    }
 
    override fun supportsParameter(methodParameter: MethodParameter): Boolean {
        return methodParameter.getParameterAnnotation(AppSession::class.java) != null
    }
}