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 package fr.paris.lutece.portal.service.security;
35
36 import fr.paris.lutece.portal.service.spring.SpringContextService;
37
38 import java.util.HashMap;
39 import java.util.HashSet;
40 import java.util.Map;
41 import java.util.Set;
42 import java.util.UUID;
43
44 import javax.servlet.http.HttpServletRequest;
45 import javax.servlet.http.HttpSession;
46
47
48
49
50
51
52 public class SecurityTokenService implements ISecurityTokenService
53 {
54 public static final String MARK_TOKEN = "token";
55 public static final String PARAMETER_TOKEN = "token";
56 private static final String BEAN_SECURITY_TOKEN_SERVICE = "securityTokenService";
57 private static final String PARAMETER_SESSION_TOKENS = "tokens";
58 private static ISecurityTokenService _singleton;
59
60
61
62
63 private SecurityTokenService( )
64 {
65 }
66
67
68
69
70
71
72 public static synchronized ISecurityTokenService getInstance( )
73 {
74 if ( _singleton == null )
75 {
76 _singleton = SpringContextService.getBean( BEAN_SECURITY_TOKEN_SERVICE );
77 }
78
79 return _singleton;
80 }
81
82
83
84
85 @Override
86 public String getToken( HttpServletRequest request, String strAction )
87 {
88 String strToken = generateNewKey( );
89 HttpSession session = request.getSession( true );
90
91 if ( session.getAttribute( PARAMETER_SESSION_TOKENS ) == null )
92 {
93 session.setAttribute( PARAMETER_SESSION_TOKENS, new HashMap<String, HashSet<String>>( ) );
94 }
95
96 Map<String, HashSet<String>> hashTokens = (Map<String, HashSet<String>>) session.getAttribute( PARAMETER_SESSION_TOKENS );
97
98 if ( !hashTokens.containsKey( strAction ) )
99 {
100 hashTokens.put( strAction, new HashSet<>( ) );
101 }
102
103 hashTokens.get( strAction ).add( strToken );
104
105 return strToken;
106 }
107
108
109
110
111 @Override
112 public boolean validate( HttpServletRequest request, String strAction )
113 {
114 HttpSession session = request.getSession( true );
115
116 String strToken = request.getParameter( PARAMETER_TOKEN );
117
118 if ( ( session.getAttribute( PARAMETER_SESSION_TOKENS ) != null )
119 && ( (Map<String, Set<String>>) session.getAttribute( PARAMETER_SESSION_TOKENS ) ).containsKey( strAction )
120 && ( (Map<String, Set<String>>) session.getAttribute( PARAMETER_SESSION_TOKENS ) ).get( strAction ).contains( strToken ) )
121 {
122 ( (Map<String, Set<String>>) session.getAttribute( PARAMETER_SESSION_TOKENS ) ).get( strAction ).remove( strToken );
123
124 return true;
125 }
126
127 return false;
128 }
129
130
131
132
133
134
135 private String generateNewKey( )
136 {
137 UUID key = UUID.randomUUID( );
138
139 return key.toString( );
140 }
141 }