Skip to content

Commit 558014b

Browse files
committed
Added spring metadata implementations
1 parent cc49ad3 commit 558014b

File tree

4 files changed

+161
-1
lines changed

4 files changed

+161
-1
lines changed

src/main/java/org/audit4j/integration/spring/SpringAudit4jConfig.java

Lines changed: 16 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,8 @@ public class SpringAudit4jConfig implements InitializingBean, DisposableBean {
5454

5555
/** The jmx. */
5656
private JMXConfig jmx;
57+
58+
private String actorSessionAttributeName;
5759

5860
/**
5961
* {@inheritDoc}
@@ -66,10 +68,20 @@ public void afterPropertiesSet() throws Exception {
6668
Configuration configuration = Configuration.INSTANCE;
6769
configuration.setLayout(layout);
6870
configuration.setHandlers(handlers);
69-
configuration.setMetaData(metaData);
71+
7072
configuration.setFilters(filters);
7173
configuration.setCommands(commands);
7274
configuration.setJmx(jmx);
75+
76+
if (metaData == null) {
77+
if (actorSessionAttributeName == null) {
78+
configuration.setMetaData(new SpringSecurityWebAuditMetaData());
79+
} else {
80+
configuration.setMetaData(new WebSessionAuditMetaData());
81+
}
82+
} else {
83+
configuration.setMetaData(metaData);
84+
}
7385
AuditManager.startWithConfiguration(configuration);
7486
}
7587

@@ -143,4 +155,7 @@ public void setJmx(JMXConfig jmx) {
143155
this.jmx = jmx;
144156
}
145157

158+
public void setActorSessionAttributeName(String actorSessionAttributeName) {
159+
this.actorSessionAttributeName = actorSessionAttributeName;
160+
}
146161
}
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
package org.audit4j.integration.spring;
2+
3+
import org.springframework.security.core.Authentication;
4+
import org.springframework.security.core.context.SecurityContextHolder;
5+
import org.springframework.security.core.userdetails.UserDetails;
6+
7+
/**
8+
* Default Metadata class to capture actor and origin information from spring
9+
* application context using Spring security and servlet requests.
10+
*
11+
* @author <a href="mailto:[email protected]">Janith Bandara</a>
12+
*
13+
* @since 2.4.1
14+
*/
15+
public class SpringSecurityWebAuditMetaData extends SpringWebAuditMetadata {
16+
17+
/** The Constant serialVersionUID. */
18+
private static final long serialVersionUID = 7243065407615627372L;
19+
20+
/**
21+
* {@inheritDoc}
22+
*
23+
* @see org.audit4j.core.MetaData#getActor()
24+
*
25+
*/
26+
@Override
27+
public String getActor() {
28+
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
29+
if (authentication != null && authentication.getPrincipal() instanceof UserDetails) {
30+
return ((UserDetails) authentication.getPrincipal()).getUsername();
31+
}
32+
return undefienedActorName;
33+
}
34+
}
Lines changed: 61 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,61 @@
1+
package org.audit4j.integration.spring;
2+
3+
import javax.servlet.ServletRequest;
4+
5+
import org.audit4j.core.MetaData;
6+
import org.audit4j.core.util.annotation.Beeta;
7+
import org.springframework.web.context.request.RequestContextHolder;
8+
import org.springframework.web.context.request.ServletRequestAttributes;
9+
10+
/**
11+
* Abstraction for Spring metadata implementations.
12+
*
13+
* @author <a href="mailto:[email protected]">Janith Bandara</a>
14+
* @since 2.4.1
15+
*/
16+
@Beeta
17+
public abstract class SpringWebAuditMetadata implements MetaData {
18+
19+
/** default actor name for unidentified actor. */
20+
String undefienedActorName = "unedentified";
21+
22+
/** Default name for unidentified origin. */
23+
String undefienedOriginName = "unedentified";
24+
25+
/**
26+
* {@inheritDoc}
27+
*
28+
* @see org.audit4j.core.MetaData#getOrigin()
29+
*
30+
*/
31+
@Override
32+
public String getOrigin() {
33+
try {
34+
return ((ServletRequest) ((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
35+
.getRequest()).getRemoteAddr();
36+
} catch (Exception e) {
37+
e.printStackTrace();
38+
}
39+
return undefienedOriginName;
40+
}
41+
42+
/**
43+
* Allows to set the undefined actor name.
44+
*
45+
* @param undefinedActorName
46+
* the new undefined actor name
47+
*/
48+
public void setUndefienedActorName(String undefinedActorName) {
49+
this.undefienedActorName = undefinedActorName;
50+
}
51+
52+
/**
53+
* Allows to set the undefined origin name.
54+
*
55+
* @param undefinedOriginName
56+
* the new undefined origin name
57+
*/
58+
public void setUndefienedOriginName(String undefinedOriginName) {
59+
this.undefienedOriginName = undefinedOriginName;
60+
}
61+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package org.audit4j.integration.spring;
2+
3+
import org.audit4j.core.util.annotation.Beeta;
4+
import org.springframework.web.context.request.RequestAttributes;
5+
import org.springframework.web.context.request.RequestContextHolder;
6+
7+
/**
8+
* Default Metadata class to capture actor and origin information from spring
9+
* application context using session attributes and servlet requests.
10+
*
11+
* @author <a href="mailto:[email protected]">Janith Bandara</a>
12+
*
13+
* @since 2.4.1
14+
*/
15+
@Beeta
16+
public class WebSessionAuditMetaData extends SpringWebAuditMetadata {
17+
18+
/** The Constant serialVersionUID. */
19+
private static final long serialVersionUID = -8565254148203328955L;
20+
21+
/** default session attribute name. */
22+
private String actorSessionAttribute = "userName";
23+
24+
/**
25+
* {@inheritDoc}
26+
*
27+
* @see org.audit4j.core.MetaData#getActor()
28+
*
29+
*/
30+
@Override
31+
public String getActor() {
32+
String actor = (String) RequestContextHolder.currentRequestAttributes().getAttribute(actorSessionAttribute,
33+
RequestAttributes.SCOPE_SESSION);
34+
if (actor != null) {
35+
return actor;
36+
}
37+
return undefienedActorName;
38+
}
39+
40+
/**
41+
* Sets the actor session attribute.
42+
*
43+
* @param actorSessionAttribute
44+
* the new actor session attribute
45+
*/
46+
public void setActorSessionAttribute(String actorSessionAttribute) {
47+
this.actorSessionAttribute = actorSessionAttribute;
48+
}
49+
50+
}

0 commit comments

Comments
 (0)