Revision b92f1605
Added by Andreas Kohlbecker about 10 years ago
eu.etaxonomy.taxeditor.store/src/main/java/eu/etaxonomy/taxeditor/store/LoginManager.java | ||
---|---|---|
1 | 1 |
// $Id$ |
2 | 2 |
/** |
3 | 3 |
* Copyright (C) 2007 EDIT |
4 |
* European Distributed Institute of Taxonomy
|
|
4 |
* European Distributed Institute of Taxonomy |
|
5 | 5 |
* http://www.e-taxonomy.eu |
6 |
*
|
|
6 |
* |
|
7 | 7 |
* The contents of this file are subject to the Mozilla Public License Version 1.1 |
8 | 8 |
* See LICENSE.TXT at the top of this package for the full license terms. |
9 | 9 |
*/ |
... | ... | |
28 | 28 |
import eu.etaxonomy.cdm.model.common.Group; |
29 | 29 |
import eu.etaxonomy.cdm.model.common.User; |
30 | 30 |
import eu.etaxonomy.cdm.persistence.hibernate.CdmDataChangeMap; |
31 |
import eu.etaxonomy.cdm.persistence.hibernate.permission.CdmAuthority;
|
|
31 |
import eu.etaxonomy.taxeditor.model.AbstractUtility;
|
|
32 | 32 |
import eu.etaxonomy.taxeditor.model.IContextListener; |
33 | 33 |
|
34 | 34 |
/** |
... | ... | |
39 | 39 |
* @version 1.0 |
40 | 40 |
*/ |
41 | 41 |
public class LoginManager extends Observable implements IConversationEnabled, IContextListener{ |
42 |
|
|
42 |
|
|
43 | 43 |
public static final Logger logger = Logger.getLogger(LoginManager.class); |
44 |
|
|
44 |
|
|
45 | 45 |
private ConversationHolder conversation; |
46 |
|
|
46 |
|
|
47 | 47 |
public LoginManager(){ |
48 | 48 |
CdmStore.getContextManager().addContextListener(this); |
49 | 49 |
} |
50 |
|
|
50 |
|
|
51 | 51 |
/** |
52 | 52 |
* <p>authenticate</p> |
53 | 53 |
* |
... | ... | |
57 | 57 |
public boolean authenticate(String username, String password){ |
58 | 58 |
|
59 | 59 |
// close all open editors |
60 |
if(!StoreUtil.closeAll()){
|
|
60 |
if(!AbstractUtility.closeAll()){
|
|
61 | 61 |
return false; |
62 | 62 |
} |
63 |
|
|
64 |
|
|
63 |
|
|
64 |
|
|
65 | 65 |
try{ |
66 |
getConversationHolder().bind(); |
|
67 |
getConversationHolder().commit(); |
|
68 |
|
|
69 | 66 |
SecurityContextHolder.clearContext(); |
70 |
|
|
67 |
|
|
71 | 68 |
Authentication lastAuthentication = CdmStore.getCurrentAuthentiation(); |
72 |
|
|
73 |
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password);
|
|
69 |
|
|
70 |
UsernamePasswordAuthenticationToken token = new UsernamePasswordAuthenticationToken(username, password); |
|
74 | 71 |
Authentication authentication = CdmStore.getAuthenticationManager().authenticate(token); |
75 |
|
|
72 |
|
|
76 | 73 |
User user = (User) authentication.getPrincipal(); |
77 | 74 |
/* circumventing problem with hibernate not refreshing the transient collection authorities in this case, |
78 | 75 |
* see http://dev.e-taxonomy.eu/trac/ticket/4053 */ |
79 |
user.initAuthorities();
|
|
80 |
|
|
76 |
user.initAuthorities(); |
|
77 |
|
|
81 | 78 |
if(logger.isDebugEnabled()){ |
82 | 79 |
StringBuilder gaText = new StringBuilder(); |
83 | 80 |
String indent = " "; |
... | ... | |
87 | 84 |
gaText.append(indent).append("gr[").append(gr.hashCode()).append("] \"").append(gr.getName()).append("\" ").append(gr.toString()).append("\n"); |
88 | 85 |
_logGrantedAuthotities(gaText, indent + indent, gr.getGrantedAuthorities()); |
89 | 86 |
} |
90 |
logger.debug("User authenticated: " + user.getUsername() + "\n" + gaText.toString());
|
|
87 |
logger.debug("User authenticated: " + user.getUsername() + "\n" + gaText.toString()); |
|
91 | 88 |
} |
92 |
|
|
93 |
SecurityContextHolder.getContext().setAuthentication(authentication);
|
|
89 |
|
|
90 |
SecurityContextHolder.getContext().setAuthentication(authentication); |
|
94 | 91 |
|
95 | 92 |
if(!authentication.equals(lastAuthentication)){ |
96 | 93 |
this.setChanged(); |
... | ... | |
99 | 96 |
return true; |
100 | 97 |
} |
101 | 98 |
catch(BadCredentialsException e){ |
102 |
StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Bad Credentials.");
|
|
99 |
AbstractUtility.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Bad Credentials.");
|
|
103 | 100 |
} |
104 | 101 |
catch(LockedException e){ |
105 |
StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Account is locked.");
|
|
102 |
AbstractUtility.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Account is locked.");
|
|
106 | 103 |
} |
107 | 104 |
catch(IllegalArgumentException e){ |
108 |
StoreUtil.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Username and/or Password empty.");
|
|
105 |
AbstractUtility.warningDialog("Could not authenticate", this, "Could not authenticate. Reason: Username and/or Password empty.");
|
|
109 | 106 |
} |
110 | 107 |
return false; |
111 | 108 |
} |
... | ... | |
116 | 113 |
gaText.append(indent).append("ga[").append(ga.hashCode()).append("] ").append(ga.toString()).append("\n"); |
117 | 114 |
} |
118 | 115 |
} |
119 |
|
|
116 |
|
|
120 | 117 |
/** |
121 | 118 |
* <p>getAuthenticatedUser</p> |
122 | 119 |
* |
... | ... | |
124 | 121 |
*/ |
125 | 122 |
public User getAuthenticatedUser(){ |
126 | 123 |
Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); |
127 |
|
|
128 |
if(authentication != null
|
|
129 |
&& authentication.getPrincipal() != null
|
|
124 |
|
|
125 |
if(authentication != null |
|
126 |
&& authentication.getPrincipal() != null |
|
130 | 127 |
&& authentication.getPrincipal() instanceof User){ |
131 | 128 |
return (User)authentication.getPrincipal(); |
132 | 129 |
} |
133 | 130 |
return null; |
134 | 131 |
} |
135 |
|
|
132 |
|
|
136 | 133 |
public void logoutAll(){ |
137 | 134 |
SecurityContextHolder.clearContext(); |
138 |
notifyObservers();
|
|
135 |
notifyObservers(); |
|
139 | 136 |
} |
140 | 137 |
|
141 | 138 |
/* (non-Javadoc) |
... | ... | |
157 | 154 |
|
158 | 155 |
/** |
159 | 156 |
* Whether the current user has the role admin |
160 |
*
|
|
157 |
* |
|
161 | 158 |
* @return |
162 | 159 |
*/ |
163 | 160 |
public boolean isAdmin() { |
164 | 161 |
// FIXME until we have rights implemented properly we do this |
165 |
// by a simple string check. This has to change
|
|
166 |
|
|
162 |
// by a simple string check. This has to change |
|
163 |
|
|
167 | 164 |
return "admin".equals(getAuthenticatedUser().getUsername()); |
168 | 165 |
} |
169 | 166 |
|
170 | 167 |
@Override |
171 | 168 |
public void contextAboutToStop(IMemento memento, IProgressMonitor monitor) { |
172 |
|
|
169 |
|
|
173 | 170 |
} |
174 | 171 |
|
175 | 172 |
@Override |
176 | 173 |
public void contextStop(IMemento memento, IProgressMonitor monitor) { |
177 |
|
|
174 |
|
|
178 | 175 |
} |
179 | 176 |
|
180 | 177 |
@Override |
... | ... | |
189 | 186 |
|
190 | 187 |
@Override |
191 | 188 |
public void workbenchShutdown(IMemento memento, IProgressMonitor monitor) { |
192 |
|
|
189 |
|
|
193 | 190 |
} |
194 | 191 |
} |
Also available in: Unified diff
no longer using a conversation for the login dialog and thus fixing problems after putting wrong credentials