]> source.dussan.org Git - archiva.git/blob
0376213a51fb2b9a01d42fbc5739bb4c0910b500
[archiva.git] /
1 package org.codehaus.plexus.redback.struts2.action;
2
3 /*
4  * Licensed to the Apache Software Foundation (ASF) under one
5  * or more contributor license agreements.  See the NOTICE file
6  * distributed with this work for additional information
7  * regarding copyright ownership.  The ASF licenses this file
8  * to you under the Apache License, Version 2.0 (the
9  * "License"); you may not use this file except in compliance
10  * with the License.  You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing,
15  * software distributed under the License is distributed on an
16  * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
17  * KIND, either express or implied.  See the License for the
18  * specific language governing permissions and limitations
19  * under the License.
20  */
21
22 import org.apache.struts2.ServletActionContext;
23 import org.apache.struts2.dispatcher.SessionMap;
24 import org.codehaus.plexus.cache.Cache;
25 import org.codehaus.redback.integration.interceptor.SecureActionBundle;
26 import org.codehaus.redback.integration.interceptor.SecureActionException;
27 import org.codehaus.redback.integration.util.AutoLoginCookies;
28 import org.springframework.context.annotation.Scope;
29 import org.springframework.stereotype.Controller;
30
31 import javax.inject.Inject;
32 import javax.inject.Named;
33
34 /**
35  * LogoutAction
36  *
37  * @author <a href="mailto:joakim@erdfelt.com">Joakim Erdfelt</a>
38  * @version $Id$
39  */
40 @Controller( "redback-logout" )
41 @Scope( "prototype" )
42 public class LogoutAction
43     extends AbstractSecurityAction
44 {
45     // Result Names.
46     private static final String LOGOUT = "security-logout";
47
48     /**
49      * cache used for user assignments
50      *
51      *  role-hint="userAssignments"
52      */
53     @Inject
54     @Named( value = "cache#userAssignments" )
55     private Cache userAssignmentsCache;
56
57     /**
58      * cache used for user permissions
59      *
60      *  role-hint="userPermissions"
61      */
62     @Inject
63     @Named( value = "cache#userPermissions" )
64     private Cache userPermissionsCache;
65
66     /**
67      * Cache used for users
68      *
69      *  role-hint="users"
70      */
71     @Inject
72     @Named( value = "cache#users" )
73     private Cache usersCache;
74
75     /**
76      *
77      */
78     @Inject
79     private AutoLoginCookies autologinCookies;
80
81     public String logout()
82     {
83         if ( getSecuritySession().getUser() == null )
84         {
85             return LOGOUT;
86         }
87
88         String currentUser = (String) getSecuritySession().getUser().getPrincipal();
89
90         if ( getSecuritySession() != null )
91         {
92             // [PLXREDBACK-65] this is a bit of a hack around the cached managers since they don't have the ability to 
93             // purge their caches through the API.  Instead try and bring them in here and invalidate 
94             // the keys directly.  This will not be required once we move to a different model for pre-calculated
95             // permission sets since that will not have the overhead that required these caches in the first place.
96             Object principal = (String) getSecuritySession().getUser().getPrincipal();
97             if ( userAssignmentsCache != null )
98             {
99                 userAssignmentsCache.remove( principal );
100             }
101             if ( userPermissionsCache != null )
102             {
103                 userPermissionsCache.remove( principal );
104             }
105             if ( usersCache != null )
106             {
107                 usersCache.remove( principal );
108             }
109         }
110
111         autologinCookies.removeRememberMeCookie( ServletActionContext.getResponse(),
112                                                  ServletActionContext.getRequest() );
113         autologinCookies.removeSignonCookie( ServletActionContext.getResponse(), ServletActionContext.getRequest() );
114
115         setAuthTokens( null );
116
117         if ( session != null )
118         {
119             ( (SessionMap) session ).invalidate();
120         }
121
122         AuditEvent event = new AuditEvent( getText( "log.logout.success" ) );
123         event.setAffectedUser( currentUser );
124         event.log();
125
126         return LOGOUT;
127     }
128
129     public SecureActionBundle initSecureActionBundle()
130         throws SecureActionException
131     {
132         return SecureActionBundle.OPEN;
133     }
134 }