Skip to content
Toggle navigation
Projects
Groups
Snippets
Help
Antti Väyrynen
/
Moya
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Issues
0
Merge Requests
0
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit b80955bc
authored
Apr 18, 2010
by
Tuomas Riihimäki
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Access control fixing to work with JAAS
1 parent
95fda792
Hide whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
47 additions
and
35 deletions
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/beans/SessionHandlerBean.java
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/facade/AccessRightFacade.java
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/facade/GenericFacade.java
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/facade/IntegerPkGenericFacade.java
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/facade/RoleFacade.java
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/facade/UserFacade.java
code/LanBortalBeansClient/ejbModule/fi/insomnia/bortal/beans/SessionHandlerBeanLocal.java
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/beans/SessionHandlerBean.java
View file @
b80955b
...
...
@@ -29,7 +29,7 @@ import fi.insomnia.bortal.model.User;
*/
@Stateless
@DeclareRoles
(
"admin"
)
public
class
SessionHandlerBean
implements
SessionHandlerBeanLocal
,
SessionHandlerBeanRemote
{
public
class
SessionHandlerBean
implements
SessionHandlerBeanLocal
,
SessionHandlerBeanRemote
{
private
static
final
Logger
logger
=
LoggerFactory
.
getLogger
(
SessionHandlerBean
.
class
);
@EJB
...
...
@@ -38,10 +38,12 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandl
private
AccessRightFacade
accessRightFacade
;
@EJB
private
RoleFacade
roleFacade
;
@Resource
SessionContext
context
;
@Resource
private
SessionContext
context
;
@EJB
private
UserBean
userbean
;
/**
* Default constructor.
*/
...
...
@@ -52,17 +54,20 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandl
@Override
public
boolean
hasPermission
(
String
target
,
User
user
,
RolePermission
permission
)
{
if
(
user
==
null
)
{
return
false
;
}
AccessRight
expectedRight
=
accessRightFacade
.
findOrCreateByName
(
target
);
User
dbusr
=
userfacade
.
find
(
user
.
getId
());
Set
<
Role
>
checkedRoles
=
new
HashSet
<
Role
>();
for
(
Role
r
:
dbusr
.
getRoles
())
{
if
(
getRights
(
r
,
expectedRight
,
permission
,
checkedRoles
))
{
return
true
;
if
(
dbusr
!=
null
)
{
Set
<
Role
>
checkedRoles
=
new
HashSet
<
Role
>();
for
(
Role
r
:
dbusr
.
getRoles
())
{
if
(
getRights
(
r
,
expectedRight
,
permission
,
checkedRoles
))
{
return
true
;
}
}
}
return
false
;
}
...
...
@@ -129,17 +134,9 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandl
return
defaultUser
;
}
public
void
testing
()
{
Principal
principal
=
context
.
getCallerPrincipal
();
logger
.
warn
(
"principal {}"
,
principal
.
getName
());
logger
.
warn
(
"Principal in admin: {}"
,
context
.
isCallerInRole
(
"admin"
));
}
@Override
public
boolean
authenticate
(
String
username
,
String
password
)
{
return
(
tryLogin
(
username
,
password
)
!=
null
);
return
(
tryLogin
(
username
,
password
)
!=
null
);
}
@Override
...
...
@@ -151,7 +148,12 @@ public class SessionHandlerBean implements SessionHandlerBeanLocal, SessionHandl
@Override
public
User
getCurrentUser
()
{
// TODO Auto-generated method stub
return
null
;
Principal
principal
=
context
.
getCallerPrincipal
();
User
ret
=
userbean
.
getUser
(
principal
.
getName
());
if
(
ret
==
null
)
{
ret
=
getDefaultUser
();
}
return
ret
;
}
}
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/facade/AccessRightFacade.java
View file @
b80955b
...
...
@@ -26,9 +26,10 @@ public class AccessRightFacade extends IntegerPkGenericFacade<AccessRight> {
public
AccessRight
findOrCreateByName
(
String
target
)
{
// Fetch access right by name
TypedQuery
<
AccessRight
>
q
=
em
.
create
NamedQuery
(
"AccessRight.findByN
ame"
,
AccessRight
.
class
);
TypedQuery
<
AccessRight
>
q
=
em
.
create
Query
(
"SELECT a FROM AccessRight a WHERE a.name = :n
ame"
,
AccessRight
.
class
);
q
.
setParameter
(
"name"
,
target
);
AccessRight
right
=
q
.
getSingleResult
();
AccessRight
right
=
null
;
right
=
this
.
getSingleNullableResult
(
q
);
// Might not exist yet -> create
if
(
right
==
null
)
{
...
...
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/facade/GenericFacade.java
View file @
b80955b
...
...
@@ -3,6 +3,7 @@ package fi.insomnia.bortal.facade;
import
java.util.List
;
import
javax.persistence.EntityManager
;
import
javax.persistence.NoResultException
;
import
javax.persistence.TypedQuery
;
import
javax.persistence.criteria.CriteriaQuery
;
import
javax.persistence.criteria.Root
;
...
...
@@ -66,5 +67,15 @@ public abstract class GenericFacade<PK,T extends ModelInterface<PK>> implements
TypedQuery
<
Long
>
q
=
getEm
().
createQuery
(
cq
);
return
q
.
getSingleResult
();
}
protected
T
getSingleNullableResult
(
TypedQuery
<
T
>
q
)
{
T
ret
=
null
;
try
{
ret
=
q
.
getSingleResult
();
}
catch
(
NoResultException
e
)
{
ret
=
null
;
}
return
ret
;
}
}
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/facade/IntegerPkGenericFacade.java
View file @
b80955b
...
...
@@ -5,13 +5,13 @@ import fi.insomnia.bortal.model.ModelInterface;
/**
* Session Bean implementation class GenericFacade
*/
public
abstract
class
IntegerPkGenericFacade
<
T
extends
ModelInterface
<
Integer
>>
extends
GenericFacade
<
Integer
,
T
>
{
public
abstract
class
IntegerPkGenericFacade
<
T
extends
ModelInterface
<
Integer
>>
extends
GenericFacade
<
Integer
,
T
>
{
public
IntegerPkGenericFacade
(
Class
<
T
>
entityClass
)
{
super
(
entityClass
);
}
}
}
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/facade/RoleFacade.java
View file @
b80955b
...
...
@@ -25,9 +25,9 @@ public class RoleFacade extends EventChildGenericFacade<Role> {
}
public
Role
findByName
(
String
name
)
{
TypedQuery
<
Role
>
q
=
em
.
createNamedQuery
(
"
User.findBy
Name"
,
Role
.
class
);
TypedQuery
<
Role
>
q
=
em
.
createNamedQuery
(
"
Role.findByRole
Name"
,
Role
.
class
);
q
.
setParameter
(
"name"
,
name
);
return
q
.
getSingleResult
(
);
return
this
.
getSingleNullableResult
(
q
);
}
public
Role
getOrCreatePublicRole
()
{
...
...
code/LanBortalBeans/ejbModule/fi/insomnia/bortal/facade/UserFacade.java
View file @
b80955b
...
...
@@ -12,7 +12,7 @@ import fi.insomnia.bortal.model.User;
@LocalBean
public
class
UserFacade
extends
IntegerPkGenericFacade
<
User
>
{
public
static
final
String
DEFAULT_USER_LOGIN
=
"
default
"
;
public
static
final
String
DEFAULT_USER_LOGIN
=
"
ANONYMOUS
"
;
@PersistenceContext
private
EntityManager
em
;
...
...
@@ -32,9 +32,10 @@ public class UserFacade extends IntegerPkGenericFacade<User> {
// return q.getSingleResult();
TypedQuery
<
User
>
q
=
em
.
createQuery
(
"SELECT u FROM User u WHERE u.login = :login"
,
User
.
class
);
q
.
setParameter
(
"login"
,
login
);
return
(
User
)
q
.
getSingleResult
(
);
return
getSingleNullableResult
(
q
);
}
public
User
getOrCreateDefaultUser
()
{
User
defaultUser
=
findByLogin
(
DEFAULT_USER_LOGIN
);
...
...
code/LanBortalBeansClient/ejbModule/fi/insomnia/bortal/beans/SessionHandlerBeanLocal.java
View file @
b80955b
...
...
@@ -9,10 +9,7 @@ public interface SessionHandlerBeanLocal {
boolean
hasPermission
(
String
target
,
User
user
,
RolePermission
permission
);
User
getDefaultUser
();
void
testing
();
User
getCurrentUser
();
}
Write
Preview
Markdown
is supported
Attach a file
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to post a comment