- Login now works
- CdiUtil now uses JNDI to lookup CDI BeanManager because that works more reliable.



git-svn-id: https://svn.libreccm.org/ccm/ccm_ng@3862 8810af33-2d31-482b-a856-94f89814c4df
pull/2/head
jensp 2016-02-15 16:51:19 +00:00
parent 3ac09f8510
commit dd1556afbb
43 changed files with 219 additions and 271 deletions

View File

@ -37,6 +37,7 @@ import java.util.Map;
import java.util.Set; import java.util.Set;
import javax.enterprise.inject.spi.CDI; import javax.enterprise.inject.spi.CDI;
import javax.inject.Inject;
import javax.servlet.ServletException; import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -66,6 +67,9 @@ public class BebopApplicationServlet extends BaseApplicationServlet {
private static final Logger LOGGER = LogManager.getLogger( private static final Logger LOGGER = LogManager.getLogger(
BebopApplicationServlet.class); BebopApplicationServlet.class);
@Inject
private Subject subject;
/** /**
* URL (pathinfo) -> Page object mapping. Based on it (and the http request * URL (pathinfo) -> Page object mapping. Based on it (and the http request
@ -152,7 +156,7 @@ public class BebopApplicationServlet extends BaseApplicationServlet {
final String pathInfo = sreq.getPathInfo(); final String pathInfo = sreq.getPathInfo();
Assert.exists(pathInfo, "String pathInfo"); Assert.exists(pathInfo, "String pathInfo");
final Subject subject = CDI.current().select(Subject.class).get(); //final Subject subject = CDI.current().select(Subject.class).get();
LOGGER.debug("Current session is: {}", sreq.getSession().getId()); LOGGER.debug("Current session is: {}", sreq.getSession().getId());
LOGGER.debug("Current Shiro session is {}", LOGGER.debug("Current Shiro session is {}",
subject.getSession().getId().toString()); subject.getSession().getId().toString());

View File

@ -44,9 +44,8 @@ public final class DispatcherConfig {
private String defaultPageClass = "com.arsdigita.bebop.Page"; private String defaultPageClass = "com.arsdigita.bebop.Page";
public static DispatcherConfig getConfig() { public static DispatcherConfig getConfig() {
final CdiUtil cdiUtil = new CdiUtil(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
final ConfigurationManager confManager = cdiUtil.findBean( .findBean(ConfigurationManager.class);
ConfigurationManager.class);
return confManager.findConfiguration(DispatcherConfig.class); return confManager.findConfiguration(DispatcherConfig.class);
} }
@ -119,15 +118,16 @@ public final class DispatcherConfig {
@Override @Override
public String toString() { public String toString() {
return String.format("%s{ " return String.format("%s{ "
+ "cachingActive = %b, " + "cachingActive = %b, "
+ "defaultExpiry = %d, " + "defaultExpiry = %d, "
+ "staticUrlPrefix = \"%s\", " + "staticUrlPrefix = \"%s\", "
+ "defaultPageClass = \"%s\"" + "defaultPageClass = \"%s\""
+ " }", + " }",
super.toString(), super.toString(),
cachingActive, cachingActive,
defaultExpiry, defaultExpiry,
staticUrlPrefix, staticUrlPrefix,
defaultPageClass); defaultPageClass);
} }
} }

View File

@ -43,9 +43,8 @@ public final class FormBuilderConfig {
private Boolean interpolateEmailActions; private Boolean interpolateEmailActions;
public static FormBuilderConfig getConfig() { public static FormBuilderConfig getConfig() {
final CdiUtil cdiUtil = new CdiUtil(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
final ConfigurationManager confManager = cdiUtil.findBean( .findBean(ConfigurationManager.class);
ConfigurationManager.class);
return confManager.findConfiguration(FormBuilderConfig.class); return confManager.findConfiguration(FormBuilderConfig.class);
} }

View File

@ -29,17 +29,16 @@ import org.libreccm.configuration.Setting;
* @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a> * @author <a href="mailto:jens.pelzetter@googlemail.com">Jens Pelzetter</a>
*/ */
@Configuration( @Configuration(
descBundle = "com.arsdigita.globalization.GlobalizationConfigDescription", descBundle = "com.arsdigita.globalization.GlobalizationConfigDescription",
descKey = "globalization.config.description") descKey = "globalization.config.description")
public class GlobalizationConfig { public class GlobalizationConfig {
@Setting(descKey = "globalization.config.default_charset") @Setting(descKey = "globalization.config.default_charset")
private String defaultCharset = "UTF-8"; private String defaultCharset = "UTF-8";
public static GlobalizationConfig getConfig() { public static GlobalizationConfig getConfig() {
final CdiUtil cdiUtil = new CdiUtil(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
final ConfigurationManager confManager = cdiUtil.findBean( .findBean(ConfigurationManager.class);
ConfigurationManager.class);
return confManager.findConfiguration(GlobalizationConfig.class); return confManager.findConfiguration(GlobalizationConfig.class);
} }
@ -76,9 +75,10 @@ public class GlobalizationConfig {
@Override @Override
public String toString() { public String toString() {
return String.format("%s{ " return String.format("%s{ "
+ "defaultCharset = \"%s\"" + "defaultCharset = \"%s\""
+ " }", + " }",
super.toString(), super.toString(),
defaultCharset); defaultCharset);
} }
} }

View File

@ -70,9 +70,6 @@ public final class KernelConfig {
private String defaultLanguage = "en"; private String defaultLanguage = "en";
public static KernelConfig getConfig() { public static KernelConfig getConfig() {
// final CdiUtil cdiUtil = new CdiUtil();
// final ConfigurationManager confManager = cdiUtil.findBean(
// ConfigurationManager.class);
final ConfigurationManager confManager = CdiUtil.createCdiUtil() final ConfigurationManager confManager = CdiUtil.createCdiUtil()
.findBean(ConfigurationManager.class); .findBean(ConfigurationManager.class);
return confManager.findConfiguration(KernelConfig.class); return confManager.findConfiguration(KernelConfig.class);

View File

@ -50,9 +50,8 @@ public final class MailConfig {
private Boolean sendHtml = false; private Boolean sendHtml = false;
public static MailConfig getConfig() { public static MailConfig getConfig() {
final CdiUtil cdiUtil = new CdiUtil(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
final ConfigurationManager confManager = cdiUtil.findBean( .findBean(ConfigurationManager.class);
ConfigurationManager.class);
return confManager.findConfiguration(MailConfig.class); return confManager.findConfiguration(MailConfig.class);
} }

View File

@ -51,9 +51,8 @@ public final class NotificationConfig {
private Integer simpleQueuePeriod = 900; private Integer simpleQueuePeriod = 900;
public static NotificationConfig getConfig() { public static NotificationConfig getConfig() {
final CdiUtil cdiUtil = new CdiUtil(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
final ConfigurationManager confManager = cdiUtil.findBean( .findBean(ConfigurationManager.class);
ConfigurationManager.class);
return confManager.findConfiguration(NotificationConfig.class); return confManager.findConfiguration(NotificationConfig.class);
} }

View File

@ -49,9 +49,8 @@ public final class TemplatingConfig {
private Integer stylesheetCacheAge = 3600; private Integer stylesheetCacheAge = 3600;
public static TemplatingConfig getConfig() { public static TemplatingConfig getConfig() {
final CdiUtil cdiUtil = new CdiUtil(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
final ConfigurationManager confManager = cdiUtil.findBean( .findBean(ConfigurationManager.class);
ConfigurationManager.class);
return confManager.findConfiguration(TemplatingConfig.class); return confManager.findConfiguration(TemplatingConfig.class);
} }

View File

@ -55,11 +55,9 @@ public final class UIConfig {
private String workspaceUrl = "/pvt/"; private String workspaceUrl = "/pvt/";
public static UIConfig getConfig() { public static UIConfig getConfig() {
// final CdiUtil cdiUtil = new CdiUtil(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
// final ConfigurationManager confManager = cdiUtil.findBean( .findBean(ConfigurationManager.class);
// ConfigurationManager.class);
final ConfigurationManager confManager = CDI.current().select(
ConfigurationManager.class).get();
return confManager.findConfiguration(UIConfig.class); return confManager.findConfiguration(UIConfig.class);
} }

View File

@ -116,13 +116,10 @@ public class AdminServlet
ServletException, IOException { ServletException, IOException {
// /////// Some preparational steps /////////////// // /////// Some preparational steps ///////////////
/* Determine access privilege: only logged in users may access */ /* Determine access privilege: only logged in users may access */
// final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final Subject subject = cdiUtil.findBean(Subject.class); final Subject subject = cdiUtil.findBean(Subject.class);
final Subject subject = CDI.current().select(Subject.class).get(); final PermissionChecker permissionChecker = cdiUtil.findBean(
// final PermissionChecker permissionChecker = cdiUtil.findBean( PermissionChecker.class);
// PermissionChecker.class);
final PermissionChecker permissionChecker = CDI.current().select(
PermissionChecker.class).get();
final ConfigurationManager confManager = CDI.current().select(ConfigurationManager.class).get(); final ConfigurationManager confManager = CDI.current().select(ConfigurationManager.class).get();
if (confManager == null) { if (confManager == null) {
@ -172,9 +169,11 @@ public class AdminServlet
// final Document doc = page.buildDocument(sreq, sresp); // final Document doc = page.buildDocument(sreq, sresp);
// Templating.getPresentationManager().servePage(doc, sreq, sresp); // Templating.getPresentationManager().servePage(doc, sreq, sresp);
// } // }
final Page page = new Page(); final Page page = PageFactory.buildPage("admin", "LibreCCM NG Admin");
page.add(new Label("admin")); page.add(new Label("admin"));
page.lock();
final Document doc = page.buildDocument(sreq, sresp); final Document doc = page.buildDocument(sreq, sresp);
Templating.getPresentationManager().servePage(doc, sreq, sresp); Templating.getPresentationManager().servePage(doc, sreq, sresp);
} }

View File

@ -78,7 +78,7 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements
setLeft(applicationTree); setLeft(applicationTree);
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final org.libreccm.web.ApplicationManager appManager = cdiUtil.findBean( final org.libreccm.web.ApplicationManager appManager = cdiUtil.findBean(
org.libreccm.web.ApplicationManager.class); org.libreccm.web.ApplicationManager.class);
@ -213,7 +213,7 @@ public class ApplicationsAdministrationTab extends LayoutPanel implements
} }
} else { } else {
// Selected key is the name of a instance pane // Selected key is the name of a instance pane
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final ApplicationRepository appRepo = cdiUtil.findBean( final ApplicationRepository appRepo = cdiUtil.findBean(
ApplicationRepository.class); ApplicationRepository.class);

View File

@ -64,7 +64,7 @@ class GroupEditForm extends GroupForm implements FormInitListener,
final Long id = (Long) state.getValue(USER_ID_PARAM); final Long id = (Long) state.getValue(USER_ID_PARAM);
// if (id != null) { // if (id != null) {
// final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final GroupRepository groupRepository; // final GroupRepository groupRepository;
// //
@ -86,7 +86,7 @@ class GroupEditForm extends GroupForm implements FormInitListener,
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final Long id = (Long) state.getValue(GROUP_ID_PARAM); final Long id = (Long) state.getValue(GROUP_ID_PARAM);
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final GroupRepository groupRepository; // final GroupRepository groupRepository;
// groupRepository = cdiUtil.findBean(GroupRepository.class); // groupRepository = cdiUtil.findBean(GroupRepository.class);

View File

@ -81,7 +81,7 @@ class SubMemberPanel extends BoxPanel {
if (key != null) { if (key != null) {
final Long userID = new Long(key); final Long userID = new Long(key);
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final UserRepository userRepository; // final UserRepository userRepository;
// final GroupManager groupManager; // final GroupManager groupManager;
// final GroupRepository groupRepository; // final GroupRepository groupRepository;

View File

@ -113,7 +113,7 @@ class UserBrowsePane extends SegmentedPanel
@Override @Override
public void actionPerformed(final ActionEvent event) { public void actionPerformed(final ActionEvent event) {
// final PageState state = event.getPageState(); // final PageState state = event.getPageState();
// final CdiUtil cdiUtil = new CdiUtil(); // final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final CcmSessionContext sessionContext; // final CcmSessionContext sessionContext;
// sessionContext = cdiUtil.findBean(CcmSessionContext.class); // sessionContext = cdiUtil.findBean(CcmSessionContext.class);
@ -143,7 +143,7 @@ class UserBrowsePane extends SegmentedPanel
protected Object initialValue(final PageState state) { protected Object initialValue(final PageState state) {
final Long id = (Long) state.getValue(USER_ID_PARAM); final Long id = (Long) state.getValue(USER_ID_PARAM);
// final CdiUtil cdiUtil = new CdiUtil(); // final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final UserRepository userRepository; // final UserRepository userRepository;
// userRepository = cdiUtil.findBean(UserRepository.class); // userRepository = cdiUtil.findBean(UserRepository.class);
@ -346,7 +346,7 @@ class UserBrowsePane extends SegmentedPanel
final PageState state = event.getPageState(); final PageState state = event.getPageState();
// final BigDecimal id = (BigDecimal) state.getValue(USER_ID_PARAM); // final BigDecimal id = (BigDecimal) state.getValue(USER_ID_PARAM);
// //
// final CdiUtil cdiUtil = new CdiUtil(); // final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final LoginManager loginManager; // final LoginManager loginManager;
// loginManager = cdiUtil.findBean( // loginManager = cdiUtil.findBean(
@ -421,7 +421,7 @@ class UserBrowsePane extends SegmentedPanel
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final User user = getUser(state); final User user = getUser(state);
// final CdiUtil cdiUtil = new CdiUtil(); // final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final UserRepository userRepository; // final UserRepository userRepository;
// userRepository = cdiUtil.findBean(UserRepository.class); // userRepository = cdiUtil.findBean(UserRepository.class);
@ -461,7 +461,7 @@ class UserBrowsePane extends SegmentedPanel
// User user = getUser(state); // User user = getUser(state);
// user.setBanned(true); // user.setBanned(true);
// //
// final CdiUtil cdiUtil = new CdiUtil(); // final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final UserRepository userRepository; // final UserRepository userRepository;
// userRepository = cdiUtil.findBean(UserRepository.class); // userRepository = cdiUtil.findBean(UserRepository.class);
@ -492,7 +492,7 @@ class UserBrowsePane extends SegmentedPanel
// User user = getUser(state); // User user = getUser(state);
// user.setBanned(false); // user.setBanned(false);
// //
// final CdiUtil cdiUtil = new CdiUtil(); // final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final UserRepository userRepository; // final UserRepository userRepository;
// userRepository = cdiUtil.findBean(UserRepository.class); // userRepository = cdiUtil.findBean(UserRepository.class);
@ -672,7 +672,7 @@ class UserBrowsePane extends SegmentedPanel
PageState ps = event.getPageState(); PageState ps = event.getPageState();
String id = (String) m_groupList.getSelectedKey(ps); String id = (String) m_groupList.getSelectedKey(ps);
if (id != null) { if (id != null) {
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final GroupRepository groupRepository; // final GroupRepository groupRepository;
// groupRepository = cdiUtil // groupRepository = cdiUtil
@ -706,7 +706,7 @@ class UserTableModel implements TableModel {
private int index = 0; private int index = 0;
public UserTableModel() { public UserTableModel() {
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final UserRepository userRepository; // final UserRepository userRepository;
// userRepository = cdiUtil.findBean(UserRepository.class); // userRepository = cdiUtil.findBean(UserRepository.class);

View File

@ -237,7 +237,7 @@ class UserForm extends Form implements FormValidationListener, AdminConstants {
/** /**
* Verify that primary email and screen name are unique * Verify that primary email and screen name are unique
*/ */
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final UserRepository userRepository; // final UserRepository userRepository;
// userRepository = cdiUtil.findBean(UserRepository.class); // userRepository = cdiUtil.findBean(UserRepository.class);

View File

@ -133,7 +133,7 @@ class UserPasswordForm extends Form
final PageState state = event.getPageState(); final PageState state = event.getPageState();
// final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final UserRepository userRepository; // final UserRepository userRepository;
// userRepository = cdiUtil.findBean(UserRepository.class); // userRepository = cdiUtil.findBean(UserRepository.class);
@ -157,7 +157,7 @@ class UserPasswordForm extends Form
FormData data = event.getFormData(); FormData data = event.getFormData();
HttpServletRequest req = state.getRequest(); HttpServletRequest req = state.getRequest();
// final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final UserRepository userRepository; // final UserRepository userRepository;
// userRepository = cdiUtil.findBean(UserRepository.class); // userRepository = cdiUtil.findBean(UserRepository.class);
@ -206,7 +206,7 @@ class UserPasswordForm extends Form
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final FormData data = event.getFormData(); final FormData data = event.getFormData();
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
// final UserRepository userRepository; // final UserRepository userRepository;
// final UserManager userManager; // final UserManager userManager;

View File

@ -137,9 +137,8 @@ public class ApplicationInfoPropertySheetModel implements PropertySheetModel {
return applicationType.description(); return applicationType.description();
case SINGLETON_PATH: case SINGLETON_PATH:
final String path; final String path;
final CdiUtil cdiUtil = new CdiUtil(); final ApplicationRepository appRepo = CdiUtil.createCdiUtil()
final ApplicationRepository appRepo = cdiUtil.findBean( .findBean(ApplicationRepository.class);
ApplicationRepository.class);
final List<CcmApplication> instances final List<CcmApplication> instances
= appRepo.findByType( = appRepo.findByType(
applicationType.name()); applicationType.name());

View File

@ -136,8 +136,8 @@ public class MultiInstanceApplicationPane<T extends CcmApplication>
public ApplicationInstancesTableModel(final Table table, public ApplicationInstancesTableModel(final Table table,
final String appType) { final String appType) {
this.table = table; this.table = table;
final CdiUtil cdiUtil = new CdiUtil(); final ApplicationRepository appRepo = CdiUtil.createCdiUtil()
final ApplicationRepository appRepo = cdiUtil.findBean(ApplicationRepository.class); .findBean(ApplicationRepository.class);
final List<CcmApplication> applications = appRepo. final List<CcmApplication> applications = appRepo.
findByType(appType); findByType(appType);
for (CcmApplication application : applications) { for (CcmApplication application : applications) {

View File

@ -82,9 +82,8 @@ public class ApplicationTreeModel implements TreeModel {
@Override @Override
public Iterator getChildren(final TreeNode node, final PageState state) { public Iterator getChildren(final TreeNode node, final PageState state) {
if (node instanceof RootTreeNode) { if (node instanceof RootTreeNode) {
final CdiUtil cdiUtil = new CdiUtil(); final ApplicationManager appManager = CdiUtil.createCdiUtil()
final ApplicationManager appManager = cdiUtil.findBean( .findBean(ApplicationManager.class);
ApplicationManager.class);
final Collection<ApplicationType> appTypes = appManager final Collection<ApplicationType> appTypes = appManager
.getApplicationTypes().values(); .getApplicationTypes().values();
@ -94,9 +93,8 @@ public class ApplicationTreeModel implements TreeModel {
final ApplicationTypeTreeNode typeTreeNode final ApplicationTypeTreeNode typeTreeNode
= (ApplicationTypeTreeNode) node; = (ApplicationTypeTreeNode) node;
final CdiUtil cdiUtil = new CdiUtil(); final ApplicationRepository appRepo = CdiUtil.createCdiUtil()
final ApplicationRepository appRepo = cdiUtil.findBean( .findBean(ApplicationRepository.class);
ApplicationRepository.class);
final List<CcmApplication> applications = appRepo.findByType( final List<CcmApplication> applications = appRepo.findByType(
typeTreeNode.getObjecType()); typeTreeNode.getObjecType());
@ -113,8 +111,7 @@ public class ApplicationTreeModel implements TreeModel {
private List<CcmApplication> retrieveApplicationInstances( private List<CcmApplication> retrieveApplicationInstances(
final ApplicationType applicationType) { final ApplicationType applicationType) {
final CdiUtil cdiUtil = new CdiUtil(); final ApplicationRepository appRepo = CdiUtil.createCdiUtil().findBean(
final ApplicationRepository appRepo = cdiUtil.findBean(
ApplicationRepository.class); ApplicationRepository.class);
return appRepo.findByType(applicationType.name()); return appRepo.findByType(applicationType.name());
@ -122,8 +119,7 @@ public class ApplicationTreeModel implements TreeModel {
private List<CcmApplication> retrieveApplicationInstances( private List<CcmApplication> retrieveApplicationInstances(
final String appObjectType) { final String appObjectType) {
final CdiUtil cdiUtil = new CdiUtil(); final ApplicationRepository appRepo = CdiUtil.createCdiUtil().findBean(
final ApplicationRepository appRepo = cdiUtil.findBean(
ApplicationRepository.class); ApplicationRepository.class);
return appRepo.findByType(appObjectType); return appRepo.findByType(appObjectType);

View File

@ -202,7 +202,7 @@ public class ChangePasswordForm extends Form
String confirmPassword = (String) m_confirmPassword.getValue(state); String confirmPassword = (String) m_confirmPassword.getValue(state);
//check oldPassword //check oldPassword
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final Shiro shiro = cdiUtil.findBean(Shiro.class); final Shiro shiro = cdiUtil.findBean(Shiro.class);
final UserManager userManager = cdiUtil.findBean(UserManager.class); final UserManager userManager = cdiUtil.findBean(UserManager.class);
@ -250,7 +250,7 @@ public class ChangePasswordForm extends Form
return; return;
} }
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final UserManager userManager = cdiUtil.findBean(UserManager.class); final UserManager userManager = cdiUtil.findBean(UserManager.class);
final Shiro shiro = cdiUtil.findBean(Shiro.class); final Shiro shiro = cdiUtil.findBean(Shiro.class);
final User user = shiro.getUser(); final User user = shiro.getUser();

View File

@ -53,7 +53,7 @@ public class EmailInitListener implements FormInitListener {
s_log.debug("START"); s_log.debug("START");
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final Subject subject = cdiUtil.findBean(Subject.class); final Subject subject = cdiUtil.findBean(Subject.class);
final Shiro shiro = cdiUtil.findBean(Shiro.class); final Shiro shiro = cdiUtil.findBean(Shiro.class);

View File

@ -36,6 +36,7 @@ import com.arsdigita.web.URL;
import org.apache.log4j.Logger; import org.apache.log4j.Logger;
import org.libreccm.configuration.ConfigurationManager; import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.security.UserRepository;
import javax.inject.Inject; import javax.inject.Inject;
import javax.servlet.ServletException; import javax.servlet.ServletException;
@ -129,6 +130,9 @@ public class LoginServlet extends BebopApplicationServlet {
@Inject @Inject
private ConfigurationManager confManager; private ConfigurationManager confManager;
@Inject
private UserRepository userRepository;
/** /**
* User extension point used to create the pages to server and setup a * User extension point used to create the pages to server and setup a
@ -140,6 +144,10 @@ public class LoginServlet extends BebopApplicationServlet {
public void doInit() throws ServletException { public void doInit() throws ServletException {
final SecurityConfig securityConfig = confManager.findConfiguration( final SecurityConfig securityConfig = confManager.findConfiguration(
SecurityConfig.class); SecurityConfig.class);
if (userRepository == null) {
throw new IllegalStateException("User repository is not available.");
}
// Allow world caching for pages without authentication, // Allow world caching for pages without authentication,
// ie, /register, /register/explain-persistent-cookies, // ie, /register, /register/explain-persistent-cookies,

View File

@ -63,7 +63,7 @@ public class ScreenNameInitListener implements FormInitListener {
FormData data = event.getFormData(); FormData data = event.getFormData();
s_log.debug("START"); s_log.debug("START");
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final Subject subject = cdiUtil.findBean(Subject.class); final Subject subject = cdiUtil.findBean(Subject.class);
final Shiro shiro = cdiUtil.findBean(Shiro.class); final Shiro shiro = cdiUtil.findBean(Shiro.class);

View File

@ -67,8 +67,7 @@ public class UserAuthenticationListener implements RequestListener {
throw new IllegalStateException("User is not logged in"); throw new IllegalStateException("User is not logged in");
} }
final CdiUtil cdiUtil = new CdiUtil(); final Subject subject = CdiUtil.createCdiUtil().findBean(Subject.class);
final Subject subject = cdiUtil.findBean(Subject.class);
return subject; return subject;
} }

View File

@ -65,8 +65,7 @@ public class UserEditForm extends UserForm
@Override @Override
public Object initialValue(final PageState ps) { public Object initialValue(final PageState ps) {
final CdiUtil cdiUtil = new CdiUtil(); final Shiro shiro = CdiUtil.createCdiUtil().findBean(Shiro.class);
final Shiro shiro = cdiUtil.findBean(Shiro.class);
final User result = shiro.getUser(); final User result = shiro.getUser();
return result; return result;
@ -103,8 +102,7 @@ public class UserEditForm extends UserForm
FormData data = event.getFormData(); FormData data = event.getFormData();
PageState state = event.getPageState(); PageState state = event.getPageState();
final CdiUtil cdiUtil = new CdiUtil(); final UserRepository userRepository = CdiUtil.createCdiUtil().findBean(
final UserRepository userRepository = cdiUtil.findBean(
UserRepository.class); UserRepository.class);
User user = getUser(state); User user = getUser(state);

View File

@ -51,10 +51,10 @@ import org.libreccm.security.UserRepository;
* *
*/ */
public abstract class UserForm extends Form public abstract class UserForm extends Form
implements LoginConstants, FormInitListener, FormValidationListener { implements LoginConstants, FormInitListener, FormValidationListener {
private static final Logger LOGGER = Logger.getLogger(UserForm.class private static final Logger LOGGER = Logger.getLogger(UserForm.class
.getName()); .getName());
private final boolean m_newUser; private final boolean m_newUser;
@ -69,15 +69,15 @@ public abstract class UserForm extends Form
protected TextField m_answer; protected TextField m_answer;
protected Label m_securitySectionHeader = new Label(LoginHelper protected Label m_securitySectionHeader = new Label(LoginHelper
.getMessage("login.userNewForm.securitySectionHeader"), false); .getMessage("login.userNewForm.securitySectionHeader"), false);
protected Label m_securityBlurb = new Label(LoginHelper protected Label m_securityBlurb = new Label(LoginHelper
.getMessage("login.userNewForm.securityBlurb")); .getMessage("login.userNewForm.securityBlurb"));
protected Label m_passwordBlurb = new Label(LoginHelper protected Label m_passwordBlurb = new Label(LoginHelper
.getMessage("login.userNewForm.passwordBlurb")); .getMessage("login.userNewForm.passwordBlurb"));
protected Label m_passwordLabel = new Label(PASSWORD); protected Label m_passwordLabel = new Label(PASSWORD);
protected Label m_confirmationLabel = new Label(PASSWORD_CONFIRMATION); protected Label m_confirmationLabel = new Label(PASSWORD_CONFIRMATION);
protected PasswordValidationListener m_passwordValidationListener protected PasswordValidationListener m_passwordValidationListener
= new PasswordValidationListener(); = new PasswordValidationListener();
protected NotEmptyValidationListener m_confirmationNotEmptyValidationListener protected NotEmptyValidationListener m_confirmationNotEmptyValidationListener
= new NotEmptyValidationListener(); = new NotEmptyValidationListener();
protected Submit m_submit = new Submit(SUBMIT); protected Submit m_submit = new Submit(SUBMIT);
@ -111,7 +111,7 @@ public abstract class UserForm extends Form
if (m_newUser) { if (m_newUser) {
m_profilePart.add(new Label(LoginHelper m_profilePart.add(new Label(LoginHelper
.getMessage("login.userNewForm.aboutYouSectionHeader"), .getMessage("login.userNewForm.aboutYouSectionHeader"),
false), ColumnPanel.FULL_WIDTH); false), ColumnPanel.FULL_WIDTH);
} }
@ -123,7 +123,7 @@ public abstract class UserForm extends Form
m_firstName.setSize(20); m_firstName.setSize(20);
m_firstName.addValidationListener(new NotEmptyValidationListener()); m_firstName.addValidationListener(new NotEmptyValidationListener());
m_firstName.addValidationListener(new StringLengthValidationListener( m_firstName.addValidationListener(new StringLengthValidationListener(
MAX_NAME_LEN)); MAX_NAME_LEN));
m_profilePart.add(m_firstNameLabel); m_profilePart.add(m_firstNameLabel);
m_profilePart.add(m_firstName); m_profilePart.add(m_firstName);
@ -133,7 +133,7 @@ public abstract class UserForm extends Form
m_lastName.setSize(25); m_lastName.setSize(25);
m_lastName.addValidationListener(new NotEmptyValidationListener()); m_lastName.addValidationListener(new NotEmptyValidationListener());
m_lastName.addValidationListener(new StringLengthValidationListener( m_lastName.addValidationListener(new StringLengthValidationListener(
MAX_NAME_LEN)); MAX_NAME_LEN));
m_profilePart.add(m_lastNameLabel); m_profilePart.add(m_lastNameLabel);
m_profilePart.add(m_lastName); m_profilePart.add(m_lastName);
@ -166,15 +166,15 @@ public abstract class UserForm extends Form
// add(new Label("")); // add(new Label(""));
if (m_newUser) { if (m_newUser) {
m_securityPart.add(new Label(LoginHelper m_securityPart.add(new Label(LoginHelper
.getMessage("login.userNewForm.securitySectionHeader"), .getMessage("login.userNewForm.securitySectionHeader"),
false), ColumnPanel.FULL_WIDTH); false), ColumnPanel.FULL_WIDTH);
m_securityPart.add(new Label(LoginHelper m_securityPart.add(new Label(LoginHelper
.getMessage("login.userNewForm.securityBlurb")), .getMessage("login.userNewForm.securityBlurb")),
ColumnPanel.FULL_WIDTH); ColumnPanel.FULL_WIDTH);
m_securityPart.add(new Label(LoginHelper m_securityPart.add(new Label(LoginHelper
.getMessage("login.userNewForm.passwordBlurb")), .getMessage("login.userNewForm.passwordBlurb")),
ColumnPanel.FULL_WIDTH); ColumnPanel.FULL_WIDTH);
// Password // Password
@ -186,14 +186,14 @@ public abstract class UserForm extends Form
// Password confirmation // Password confirmation
m_confirm = new Password(new StringParameter( m_confirm = new Password(new StringParameter(
FORM_PASSWORD_CONFIRMATION)); FORM_PASSWORD_CONFIRMATION));
m_confirm.addValidationListener(new NotEmptyValidationListener()); m_confirm.addValidationListener(new NotEmptyValidationListener());
m_securityPart.add(m_confirmationLabel); m_securityPart.add(m_confirmationLabel);
m_securityPart.add(m_confirm); m_securityPart.add(m_confirm);
m_securityPart.add(new Label(LoginHelper m_securityPart.add(new Label(LoginHelper
.getMessage("login.userNewForm.questionBlurb")), .getMessage("login.userNewForm.questionBlurb")),
ColumnPanel.FULL_WIDTH); ColumnPanel.FULL_WIDTH);
} }
@ -215,13 +215,13 @@ public abstract class UserForm extends Form
*/ */
@Override @Override
public void init(final FormSectionEvent event) public void init(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final User user = getUser(state); final User user = getUser(state);
if (user == null) { if (user == null) {
throw new FormProcessException(LoginGlobalizationUtil.globalize( throw new FormProcessException(LoginGlobalizationUtil.globalize(
"login.userForm.couldnt_load_user")); "login.userForm.couldnt_load_user"));
} }
m_firstName.setValue(state, user.getGivenName()); m_firstName.setValue(state, user.getGivenName());
m_lastName.setValue(state, user.getFamilyName()); m_lastName.setValue(state, user.getFamilyName());
@ -234,8 +234,9 @@ public abstract class UserForm extends Form
* Gets the current user for initialising the form. * Gets the current user for initialising the form.
* *
* @param state * @param state
*
* @return the current user, if the form should not be initialised with user * @return the current user, if the form should not be initialised with user
* data. * data.
*/ */
protected abstract User getUser(final PageState state); protected abstract User getUser(final PageState state);
@ -246,18 +247,19 @@ public abstract class UserForm extends Form
* users. * users.
* *
* @param event * @param event
*
* @throws com.arsdigita.bebop.FormProcessException * @throws com.arsdigita.bebop.FormProcessException
*/ */
@Override @Override
public void validate(final FormSectionEvent event) public void validate(final FormSectionEvent event)
throws FormProcessException { throws FormProcessException {
final PageState state = event.getPageState(); final PageState state = event.getPageState();
final FormData data = event.getFormData(); final FormData data = event.getFormData();
final CdiUtil cdiUtil = new CdiUtil(); final UserRepository userRepository = CdiUtil.createCdiUtil().findBean(
final UserRepository userRepository = cdiUtil.findBean(UserRepository.class); UserRepository.class);
try { try {
if (m_newUser) { if (m_newUser) {
// Verify that password and confirmation match // Verify that password and confirmation match
@ -265,7 +267,7 @@ public abstract class UserForm extends Form
String confirm = (String) m_confirm.getValue(state); String confirm = (String) m_confirm.getValue(state);
if ((password != null) && (confirm != null) if ((password != null) && (confirm != null)
&& !password.equals(confirm)) { && !password.equals(confirm)) {
data.addError(FORM_PASSWORD_CONFIRMATION, data.addError(FORM_PASSWORD_CONFIRMATION,
ERROR_MISMATCH_PASSWORD); ERROR_MISMATCH_PASSWORD);
} }
@ -286,7 +288,7 @@ public abstract class UserForm extends Form
final String oldEmail = user.getPrimaryEmailAddress().getAddress(); final String oldEmail = user.getPrimaryEmailAddress().getAddress();
final String email = (String) m_email.getValue(state); final String email = (String) m_email.getValue(state);
if (KernelConfig.getConfig().emailIsPrimaryIdentifier() if (KernelConfig.getConfig().emailIsPrimaryIdentifier()
&& email != null && !email.equals(oldEmail)) { && email != null && !email.equals(oldEmail)) {
final User result = userRepository.findByEmailAddress(email); final User result = userRepository.findByEmailAddress(email);
if (result != null) { if (result != null) {
data.addError(FORM_EMAIL, ERROR_DUPLICATE_EMAIL); data.addError(FORM_EMAIL, ERROR_DUPLICATE_EMAIL);

View File

@ -37,7 +37,6 @@ import org.libreccm.security.User;
import org.libreccm.web.ApplicationRepository; import org.libreccm.web.ApplicationRepository;
import org.libreccm.web.CcmApplication; import org.libreccm.web.CcmApplication;
/** /**
* A reusable Bebop component to display the primary attributes of the currently * A reusable Bebop component to display the primary attributes of the currently
* logged in user. Users can extend this class to provide information about * logged in user. Users can extend this class to provide information about
@ -105,10 +104,9 @@ public class UserInfo extends SimpleContainer {
m_contentCenters = new ArrayList<>(); m_contentCenters = new ArrayList<>();
final CdiUtil cdiUtil = new CdiUtil(); final ApplicationRepository appRepo = CdiUtil
final ApplicationRepository appRepo = cdiUtil.findBean( .createCdiUtil().findBean(ApplicationRepository.class);
ApplicationRepository.class);
m_contentCenters = appRepo.findByType( m_contentCenters = appRepo.findByType(
"com.arsdigita.cms.ContentCenter"); "com.arsdigita.cms.ContentCenter");
} }
@ -185,6 +183,7 @@ public class UserInfo extends SimpleContainer {
/** /**
* @param state * @param state
*
* @return true if the user is logged in * @return true if the user is logged in
* *
*/ */
@ -194,6 +193,7 @@ public class UserInfo extends SimpleContainer {
/** /**
* @param state * @param state
*
* @return the User object for which we are generating information * @return the User object for which we are generating information
* *
* @throws IllegalStateException if user is not logged in. Call * @throws IllegalStateException if user is not logged in. Call
@ -207,11 +207,10 @@ public class UserInfo extends SimpleContainer {
if (!isLoggedIn(state)) { if (!isLoggedIn(state)) {
throw new IllegalStateException("user is not logged in"); throw new IllegalStateException("user is not logged in");
} }
final CdiUtil cdiUtil = new CdiUtil(); final Shiro shiro = CdiUtil.createCdiUtil().findBean(Shiro.class);
final Shiro shiro = cdiUtil.findBean(Shiro.class);
final User user = shiro.getUser(); final User user = shiro.getUser();
return user; return user;
} }

View File

@ -141,27 +141,6 @@ public class UserLoginForm extends Form implements LoginConstants,
final boolean autoRegistrationOn) { final boolean autoRegistrationOn) {
super(FORM_NAME, panel); super(FORM_NAME, panel);
// final ConfigurationManager confManager = CDI.current().select(
// ConfigurationManager.class).get();
// final BeanManager beanManager = CDI.current().getBeanManager();
// final Set<Bean<?>> beans = beanManager.getBeans(
// ConfigurationManager.class);
// final Iterator<Bean<?>> iterator = beans.iterator();
// final ConfigurationManager confManager;
// if (iterator.hasNext()) {
// @SuppressWarnings("unchecked")
// final Bean<ConfigurationManager> bean
// = (Bean<ConfigurationManager>) iterator
// .next();
// final CreationalContext<ConfigurationManager> ctx = beanManager.
// createCreationalContext(bean);
//
// confManager = (ConfigurationManager) beanManager.getReference(
// bean, ConfigurationManager.class, ctx);
// } else {
// throw new UncheckedWrapperException(
// "Failed to lookup ConfigurationManager");
// }
final ConfigurationManager confManager = CdiUtil.createCdiUtil() final ConfigurationManager confManager = CdiUtil.createCdiUtil()
.findBean(ConfigurationManager.class); .findBean(ConfigurationManager.class);
securityConfig = confManager.findConfiguration(SecurityConfig.class); securityConfig = confManager.findConfiguration(SecurityConfig.class);
@ -378,8 +357,7 @@ public class UserLoginForm extends Form implements LoginConstants,
throws FormProcessException { throws FormProcessException {
PageState state = event.getPageState(); PageState state = event.getPageState();
final CdiUtil cdiUtil = new CdiUtil(); final Subject subject = CdiUtil.createCdiUtil().findBean(Subject.class);
final Subject subject = cdiUtil.findBean(Subject.class);
final UsernamePasswordToken token = new UsernamePasswordToken( final UsernamePasswordToken token = new UsernamePasswordToken(
m_loginName.getValue(state).toString(), m_loginName.getValue(state).toString(),
@ -389,11 +367,12 @@ public class UserLoginForm extends Form implements LoginConstants,
try { try {
LOGGER.debug("Trying to login user {}...", subject.toString()); LOGGER.debug("Trying to login user {}...", subject.toString());
subject.login(token); subject.login(token);
LOGGER.debug("User {} logged in successfully.", token.getUsername());
} catch (AuthenticationException ex) { } catch (AuthenticationException ex) {
onLoginFail(event, ex); onLoginFail(event, ex);
LOGGER.debug("Login failed.", ex);
} }
LOGGER.debug("User {} logged in successfully.", token.getUsername());
LOGGER.debug("subject = {}", subject.toString()); LOGGER.debug("subject = {}", subject.toString());
LOGGER.debug("Current session is: {}", LOGGER.debug("Current session is: {}",
state.getRequest().getSession().getId()); state.getRequest().getSession().getId());

View File

@ -34,7 +34,7 @@ import org.libreccm.cdi.utils.CdiUtil;
public class UserLogoutListener implements ActionListener { public class UserLogoutListener implements ActionListener {
private static final Logger s_log = Logger.getLogger( private static final Logger s_log = Logger.getLogger(
UserLogoutListener.class); UserLogoutListener.class);
/** /**
* Logs out the user. * Logs out the user.
@ -44,9 +44,7 @@ public class UserLogoutListener implements ActionListener {
*/ */
@Override @Override
public void actionPerformed(final ActionEvent event) { public void actionPerformed(final ActionEvent event) {
final Subject subject = CdiUtil.createCdiUtil().findBean(Subject.class);
final CdiUtil cdiUtil = new CdiUtil();
final Subject subject = cdiUtil.findBean(Subject.class);
subject.logout(); subject.logout();
} }

View File

@ -151,7 +151,7 @@ public class UserNewForm extends UserForm implements FormInitListener,
final Exception[] formExceptions = new Exception[]{null}; final Exception[] formExceptions = new Exception[]{null};
final CdiUtil cdiUtil = new CdiUtil(); final CdiUtil cdiUtil = CdiUtil.createCdiUtil();
final Shiro shiro = cdiUtil.findBean(Shiro.class); final Shiro shiro = cdiUtil.findBean(Shiro.class);
shiro.getSystemUser().execute(new Callable<Void>() { shiro.getSystemUser().execute(new Callable<Void>() {
@ -159,9 +159,8 @@ public class UserNewForm extends UserForm implements FormInitListener,
@Override @Override
public Void call() throws Exception { public Void call() throws Exception {
final CdiUtil cdiUtil = new CdiUtil(); final UserManager userManager = CdiUtil.createCdiUtil()
final UserManager userManager = cdiUtil.findBean( .findBean(UserManager.class);
UserManager.class);
userManager.createUser(firstName, userManager.createUser(firstName,
lastName, lastName,
screenName, screenName,

View File

@ -22,20 +22,16 @@ import com.arsdigita.util.UncheckedWrapperException;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger; import org.apache.logging.log4j.Logger;
import org.apache.logging.log4j.message.ParameterizedMessage; import org.libreccm.cdi.utils.CdiUtil;
import org.libreccm.configuration.Configuration; import org.libreccm.configuration.Configuration;
import org.libreccm.configuration.ConfigurationManager; import org.libreccm.configuration.ConfigurationManager;
import org.libreccm.configuration.Setting; import org.libreccm.configuration.Setting;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.HashSet; import java.util.HashSet;
import java.util.Iterator;
import java.util.Set; import java.util.Set;
import java.util.StringJoiner; import java.util.StringJoiner;
import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.CDI; import javax.enterprise.inject.spi.CDI;
import javax.validation.ConstraintViolation; import javax.validation.ConstraintViolation;
import javax.validation.Validation; import javax.validation.Validation;
@ -84,36 +80,9 @@ public final class WebConfig {
private String dynamicHostProviderClass; private String dynamicHostProviderClass;
public static WebConfig getConfig() { public static WebConfig getConfig() {
final ConfigurationManager confManager = CDI.current().select(
ConfigurationManager.class).get();
// final BeanManager beanManager = CDI.current().getBeanManager(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
// final Set<Bean<?>> beans = beanManager.getBeans( .findBean(ConfigurationManager.class);
// ConfigurationManager.class);
// final Iterator<Bean<?>> iterator = beans.iterator();
// final ConfigurationManager confManager;
// if (iterator.hasNext()) {
// @SuppressWarnings("unchecked")
// final Bean<ConfigurationManager> bean
// = (Bean<ConfigurationManager>) iterator
// .next();
// final CreationalContext<ConfigurationManager> ctx = beanManager
// .createCreationalContext(bean);
//
// confManager = (ConfigurationManager) beanManager.getReference(
// bean, ConfigurationManager.class, ctx);
// } else {
// LOGGER.error(new ParameterizedMessage(
// "No CDI Bean for type {} found.",
// ConfigurationManager.class.getName()));
// throw new IllegalStateException(String.format(
// "No CDI Bean for type \"%s\" found",
// ConfigurationManager.class.getName()));
// }
// final CdiUtil cdiUtil = new CdiUtil();
// final ConfigurationManager confManager = cdiUtil.findBean(
// ConfigurationManager.class);
return confManager.findConfiguration(WebConfig.class); return confManager.findConfiguration(WebConfig.class);
} }

View File

@ -39,9 +39,8 @@ public final class WorkflowConfig {
private String alertsSender; private String alertsSender;
public static WorkflowConfig getConfig() { public static WorkflowConfig getConfig() {
final CdiUtil cdiUtil = new CdiUtil(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
final ConfigurationManager confManager = cdiUtil.findBean( .findBean(ConfigurationManager.class);
ConfigurationManager.class);
return confManager.findConfiguration(WorkflowConfig.class); return confManager.findConfiguration(WorkflowConfig.class);
} }

View File

@ -72,9 +72,8 @@ public final class XmlConfig {
private Boolean fullTimeFormatterEnabled = false; private Boolean fullTimeFormatterEnabled = false;
public static XmlConfig getConfig() { public static XmlConfig getConfig() {
final CdiUtil cdiUtil = new CdiUtil(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
final ConfigurationManager confManager = cdiUtil.findBean( .findBean(ConfigurationManager.class);
ConfigurationManager.class);
return confManager.findConfiguration(XmlConfig.class); return confManager.findConfiguration(XmlConfig.class);
} }
@ -117,11 +116,11 @@ public final class XmlConfig {
return domBuilder; return domBuilder;
} }
/** /**
* Returns the Document Builder factory class name to use * Returns the Document Builder factory class name to use
* *
* The method assures that the return value is a valid class name. * The method assures that the return value is a valid class name.
* *
* Not used at the moment. * Not used at the moment.
* *
* @return String Document Builder factory class name * @return String Document Builder factory class name
@ -134,20 +133,19 @@ public final class XmlConfig {
return getDefaultDomBuilderFactoryClassname(); return getDefaultDomBuilderFactoryClassname();
} }
} }
/** /**
* Returns the class name of the default {@link DocumentBuilderFactory}. * Returns the class name of the default {@link DocumentBuilderFactory}.
* This method encapsulates the default value so that is easy to change. The method is only for * This method encapsulates the default value so that is easy to change. The
* use by the classes in the {@code com.arsdigita.xml} package, therefore the method is * method is only for use by the classes in the {@code com.arsdigita.xml}
* only accessible from the package. * package, therefore the method is only accessible from the package.
* *
* @return * @return
*/ */
String getDefaultDomBuilderFactoryClassname() { String getDefaultDomBuilderFactoryClassname() {
return DOM_XERCES; return DOM_XERCES;
} }
public void setDomBuilder(final String domBuilder) { public void setDomBuilder(final String domBuilder) {
this.domBuilder = domBuilder; this.domBuilder = domBuilder;
} }
@ -156,11 +154,11 @@ public final class XmlConfig {
return saxParser; return saxParser;
} }
/** /**
* Returns the Sax Parser factory class name to use. * Returns the Sax Parser factory class name to use.
* *
* The method assures that the return value is a valid class name. * The method assures that the return value is a valid class name.
* *
* Not used at the moment. * Not used at the moment.
* *
* @return String Sax Parser factory class name * @return String Sax Parser factory class name
@ -175,18 +173,17 @@ public final class XmlConfig {
} }
/** /**
* Returns the class name of the default {@link SAXParserFactory}. * Returns the class name of the default {@link SAXParserFactory}. This
* This method encapsulates the default value so that is easy to change. The method is only for * method encapsulates the default value so that is easy to change. The
* use by the classes in the {@code com.arsdigita.xml} package, therefore the method is * method is only for use by the classes in the {@code com.arsdigita.xml}
* only visible in the package. * package, therefore the method is only visible in the package.
* *
* @return * @return
*/ */
String getDefaultSaxParserFactoryClassname() { String getDefaultSaxParserFactoryClassname() {
return SAX_XERCES; return SAX_XERCES;
} }
public void setSaxParser(final String saxParser) { public void setSaxParser(final String saxParser) {
this.saxParser = saxParser; this.saxParser = saxParser;
} }

View File

@ -36,9 +36,8 @@ public final class DateFormatterConfig {
private String locale = null; private String locale = null;
public static DateFormatterConfig getConfig() { public static DateFormatterConfig getConfig() {
final CdiUtil cdiUtil = new CdiUtil(); final ConfigurationManager confManager = CdiUtil.createCdiUtil()
final ConfigurationManager confManager = cdiUtil.findBean( .findBean(ConfigurationManager.class);
ConfigurationManager.class);
return confManager.findConfiguration(DateFormatterConfig.class); return confManager.findConfiguration(DateFormatterConfig.class);
} }

View File

@ -28,7 +28,6 @@ import java.util.Set;
import javax.enterprise.context.spi.CreationalContext; import javax.enterprise.context.spi.CreationalContext;
import javax.enterprise.inject.spi.Bean; import javax.enterprise.inject.spi.Bean;
import javax.enterprise.inject.spi.BeanManager; import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.CDI;
import javax.naming.InitialContext; import javax.naming.InitialContext;
import javax.naming.NamingException; import javax.naming.NamingException;
@ -42,10 +41,6 @@ public class CdiUtil {
private final BeanManager beanManager; private final BeanManager beanManager;
public CdiUtil() {
beanManager = CDI.current().getBeanManager();
}
private CdiUtil(final BeanManager beanManager) { private CdiUtil(final BeanManager beanManager) {
this.beanManager = beanManager; this.beanManager = beanManager;
} }

View File

@ -21,10 +21,10 @@ package org.libreccm.security;
import static org.libreccm.core.CoreConstants.*; import static org.libreccm.core.CoreConstants.*;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.HashSet;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import javax.persistence.Entity; import javax.persistence.Entity;
import javax.persistence.NamedQueries; import javax.persistence.NamedQueries;
@ -65,21 +65,21 @@ public class Group extends Party implements Serializable {
@OneToMany(mappedBy = "group") @OneToMany(mappedBy = "group")
@XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS) @XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS)
@XmlElement(name = "group-membership", namespace = CORE_XML_NS) @XmlElement(name = "group-membership", namespace = CORE_XML_NS)
private List<GroupMembership> memberships = new ArrayList<>(); private Set<GroupMembership> memberships = new HashSet<>();
protected Group() { protected Group() {
super(); super();
} }
public List<GroupMembership> getMemberships() { public Set<GroupMembership> getMemberships() {
if (memberships == null) { if (memberships == null) {
return null; return null;
} else { } else {
return Collections.unmodifiableList(memberships); return Collections.unmodifiableSet(memberships);
} }
} }
protected void setMemberships(final List<GroupMembership> memberships) { protected void setMemberships(final Set<GroupMembership> memberships) {
this.memberships = memberships; this.memberships = memberships;
} }

View File

@ -23,10 +23,10 @@ import static org.libreccm.core.CoreConstants.*;
import org.libreccm.core.DefaultEntityGraph; import org.libreccm.core.DefaultEntityGraph;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.HashSet;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
@ -91,7 +91,7 @@ public class Party implements Serializable {
@OneToMany(mappedBy = "member") @OneToMany(mappedBy = "member")
@XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS) @XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS)
@XmlElement(name = "role-membership", namespace = CORE_XML_NS) @XmlElement(name = "role-membership", namespace = CORE_XML_NS)
private List<RoleMembership> roleMemberships = new ArrayList<>(); private Set<RoleMembership> roleMemberships = new HashSet<>();
protected Party() { protected Party() {
super(); super();
@ -113,15 +113,15 @@ public class Party implements Serializable {
this.name = name; this.name = name;
} }
public List<RoleMembership> getRoleMemberships() { public Set<RoleMembership> getRoleMemberships() {
if (roleMemberships == null) { if (roleMemberships == null) {
return null; return null;
} else { } else {
return Collections.unmodifiableList(roleMemberships); return Collections.unmodifiableSet(roleMemberships);
} }
} }
protected void setRoleMemberships(final List<RoleMembership> roleMemberships) { protected void setRoleMemberships(final Set<RoleMembership> roleMemberships) {
this.roleMemberships = roleMemberships; this.roleMemberships = roleMemberships;
} }

View File

@ -26,8 +26,10 @@ import org.libreccm.workflow.TaskAssignment;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import javax.persistence.Column; import javax.persistence.Column;
import javax.persistence.Entity; import javax.persistence.Entity;
@ -83,7 +85,7 @@ public class Role implements Serializable {
@OneToMany(mappedBy = "role") @OneToMany(mappedBy = "role")
@XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS) @XmlElementWrapper(name = "role-memberships", namespace = CORE_XML_NS)
@XmlElement(name = "role-membership", namespace = CORE_XML_NS) @XmlElement(name = "role-membership", namespace = CORE_XML_NS)
private List<RoleMembership> memberships = new ArrayList<>(); private Set<RoleMembership> memberships = new HashSet<>();
/** /**
* Permissions granted to the role. * Permissions granted to the role.
@ -116,15 +118,15 @@ public class Role implements Serializable {
this.name = name; this.name = name;
} }
public List<RoleMembership> getMemberships() { public Set<RoleMembership> getMemberships() {
if (memberships == null) { if (memberships == null) {
return null; return null;
} else { } else {
return Collections.unmodifiableList(memberships); return Collections.unmodifiableSet(memberships);
} }
} }
protected void setMemberships(final List<RoleMembership> memberships) { protected void setMemberships(final Set<RoleMembership> memberships) {
this.memberships = memberships; this.memberships = memberships;
} }

View File

@ -111,9 +111,8 @@ public class SecuredCollection<E extends CcmObject> implements Collection<E> {
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Object[] toArray() { public Object[] toArray() {
final CdiUtil cdiUtil = new CdiUtil(); final PermissionChecker permissionChecker = CdiUtil.createCdiUtil()
final PermissionChecker permissionChecker = cdiUtil.findBean( .findBean(PermissionChecker.class);
PermissionChecker.class);
final Object[] objects = collection.toArray(); final Object[] objects = collection.toArray();
for (int i = 0; i < objects.length; i++) { for (int i = 0; i < objects.length; i++) {
@ -129,9 +128,8 @@ public class SecuredCollection<E extends CcmObject> implements Collection<E> {
@Override @Override
@SuppressWarnings({"unchecked", "PMD.UseVarargs"}) @SuppressWarnings({"unchecked", "PMD.UseVarargs"})
public <T> T[] toArray(final T[] array) { public <T> T[] toArray(final T[] array) {
final CdiUtil cdiUtil = new CdiUtil(); final PermissionChecker permissionChecker = CdiUtil.createCdiUtil()
final PermissionChecker permissionChecker = cdiUtil.findBean( .findBean(PermissionChecker.class);
PermissionChecker.class);
final T[] objects = collection.toArray(array); final T[] objects = collection.toArray(array);
for (int i = 0; i < objects.length; i++) { for (int i = 0; i < objects.length; i++) {

View File

@ -90,10 +90,9 @@ class SecuredEntrySet<E extends Map.Entry<K, V>, K, V extends CcmObject>
@Override @Override
@SuppressWarnings("unchecked") @SuppressWarnings("unchecked")
public Object[] toArray() { public Object[] toArray() {
final CdiUtil cdiUtil = new CdiUtil(); final PermissionChecker permissionChecker = CdiUtil.createCdiUtil()
final PermissionChecker permissionChecker = cdiUtil.findBean( .findBean(PermissionChecker.class);
PermissionChecker.class);
final Object[] entries = set.toArray(); final Object[] entries = set.toArray();
for (int i = 0; i < entries.length; i++) { for (int i = 0; i < entries.length; i++) {
final E entry = (E) entries[i]; final E entry = (E) entries[i];
@ -109,10 +108,9 @@ class SecuredEntrySet<E extends Map.Entry<K, V>, K, V extends CcmObject>
@Override @Override
@SuppressWarnings({"unchecked", "PMD.UseVarargs"}) @SuppressWarnings({"unchecked", "PMD.UseVarargs"})
public <T> T[] toArray(final T[] array) { public <T> T[] toArray(final T[] array) {
final CdiUtil cdiUtil = new CdiUtil(); final PermissionChecker permissionChecker = CdiUtil.createCdiUtil()
final PermissionChecker permissionChecker = cdiUtil.findBean( .findBean(PermissionChecker.class);
PermissionChecker.class);
final E[] entries = (E[]) set.toArray(array); final E[] entries = (E[]) set.toArray(array);
for (int i = 0; i < entries.length; i++) { for (int i = 0; i < entries.length; i++) {
if (!permissionChecker.isPermitted(requiredPrivilege, if (!permissionChecker.isPermitted(requiredPrivilege,

View File

@ -18,7 +18,6 @@
*/ */
package org.libreccm.security; package org.libreccm.security;
import static org.libreccm.core.CoreConstants.*; import static org.libreccm.core.CoreConstants.*;
import org.apache.logging.log4j.LogManager; import org.apache.logging.log4j.LogManager;
@ -34,7 +33,7 @@ import org.libreccm.core.CcmObject;
class SecuredHelper<E extends CcmObject> { class SecuredHelper<E extends CcmObject> {
private final static Logger LOGGER = LogManager.getLogger( private final static Logger LOGGER = LogManager.getLogger(
SecuredHelper.class); SecuredHelper.class);
/** /**
* Class of the objects in the collection. * Class of the objects in the collection.
@ -56,20 +55,21 @@ class SecuredHelper<E extends CcmObject> {
* object with the provided privilege. * object with the provided privilege.
* *
* @param object The object to check. * @param object The object to check.
*
* @return The provided {@code object} if the current subject has the * @return The provided {@code object} if the current subject has the
* permission to access it with the provided {@code privilege}. Otherwise a * permission to access it with the provided {@code privilege}.
* placeholder object is returned. The {@link CcmObject#displayName} * Otherwise a placeholder object is returned. The
* property of these object is set to {@code Access denied}. * {@link CcmObject#displayName} property of these object is set to
* {@code Access denied}.
*/ */
protected E canAccess(final E object) { protected E canAccess(final E object) {
if (object == null) { if (object == null) {
return null; return null;
} }
final CdiUtil cdiUtil = new CdiUtil(); final PermissionChecker permissionChecker = CdiUtil.createCdiUtil()
final PermissionChecker permissionChecker = cdiUtil.findBean( .findBean(PermissionChecker.class);
PermissionChecker.class);
if (permissionChecker.isPermitted(requiredPrivilege, object)) { if (permissionChecker.isPermitted(requiredPrivilege, object)) {
return object; return object;
} else { } else {
@ -81,17 +81,18 @@ class SecuredHelper<E extends CcmObject> {
* Helper method for creating an <em>Access denied</em> placeholder object. * Helper method for creating an <em>Access denied</em> placeholder object.
* *
* @return An object of the provided {@link #clazz} with it's * @return An object of the provided {@link #clazz} with it's
* {@link CcmObject#displayName} property set to {@code Access denied}. * {@link CcmObject#displayName} property set to
* {@code Access denied}.
*/ */
protected E generateAccessDeniedObject() { protected E generateAccessDeniedObject() {
try { try {
final E placeholder = clazz.newInstance(); final E placeholder = clazz.newInstance();
placeholder.setDisplayName(ACCESS_DENIED); placeholder.setDisplayName(ACCESS_DENIED);
return placeholder; return placeholder;
} catch (InstantiationException | IllegalAccessException ex) { } catch (InstantiationException | IllegalAccessException ex) {
LOGGER.error( LOGGER.error(
"Failed to create placeholder object. Returing null.", ex); "Failed to create placeholder object. Returing null.", ex);
return null; return null;
} }
} }

View File

@ -26,8 +26,10 @@ import org.libreccm.core.EmailAddress;
import java.io.Serializable; import java.io.Serializable;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Collections; import java.util.Collections;
import java.util.HashSet;
import java.util.List; import java.util.List;
import java.util.Objects; import java.util.Objects;
import java.util.Set;
import javax.persistence.AssociationOverride; import javax.persistence.AssociationOverride;
import javax.persistence.CollectionTable; import javax.persistence.CollectionTable;
@ -43,8 +45,8 @@ import javax.persistence.NamedEntityGraph;
import javax.persistence.NamedEntityGraphs; import javax.persistence.NamedEntityGraphs;
import javax.persistence.NamedQueries; import javax.persistence.NamedQueries;
import javax.persistence.NamedQuery; import javax.persistence.NamedQuery;
import javax.persistence.NamedSubgraph;
import javax.persistence.OneToMany; import javax.persistence.OneToMany;
import javax.persistence.OrderColumn;
import javax.persistence.Table; import javax.persistence.Table;
import javax.validation.constraints.NotNull; import javax.validation.constraints.NotNull;
import javax.xml.bind.annotation.XmlElement; import javax.xml.bind.annotation.XmlElement;
@ -68,12 +70,28 @@ import javax.xml.bind.annotation.XmlTransient;
+ "u.primaryEmailAddress.address = :emailAddress") + "u.primaryEmailAddress.address = :emailAddress")
}) })
@NamedEntityGraphs({ @NamedEntityGraphs({
@NamedEntityGraph(name = "User.withGroupAndRoleMemberships", @NamedEntityGraph(
attributeNodes = { name = "User.withGroupAndRoleMemberships",
@NamedAttributeNode( attributeNodes = {
value = "groupMemberships"), @NamedAttributeNode(
@NamedAttributeNode( value = "groupMemberships"),
value = "roleMemberships")}) @NamedAttributeNode(
value = "roleMemberships",
subgraph = "role")},
subgraphs = {
@NamedSubgraph(
name = "role",
attributeNodes = {
@NamedAttributeNode(value = "role",
subgraph = "permissions")
}),
@NamedSubgraph(
name = "permissions",
attributeNodes = {
@NamedAttributeNode(value = "permissions")}
)
})
}) })
@DefaultEntityGraph("User.withGroupAndRoleMemberships") @DefaultEntityGraph("User.withGroupAndRoleMemberships")
@XmlRootElement(name = "user", namespace = CORE_XML_NS) @XmlRootElement(name = "user", namespace = CORE_XML_NS)
@ -157,7 +175,7 @@ public class User extends Party implements Serializable {
@OneToMany(mappedBy = "member") @OneToMany(mappedBy = "member")
@XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS) @XmlElementWrapper(name = "group-memberships", namespace = CORE_XML_NS)
@XmlElement(name = "group-membership", namespace = CORE_XML_NS) @XmlElement(name = "group-membership", namespace = CORE_XML_NS)
private List<GroupMembership> groupMemberships = new ArrayList<>(); private Set<GroupMembership> groupMemberships = new HashSet<>();
protected User() { protected User() {
super(); super();
@ -232,12 +250,12 @@ public class User extends Party implements Serializable {
this.passwordResetRequired = passwordResetRequired; this.passwordResetRequired = passwordResetRequired;
} }
public List<GroupMembership> getGroupMemberships() { public Set<GroupMembership> getGroupMemberships() {
return Collections.unmodifiableList(groupMemberships); return Collections.unmodifiableSet(groupMemberships);
} }
protected void setGroupMemberships( protected void setGroupMemberships(
final List<GroupMembership> groupMemberships) { final Set<GroupMembership> groupMemberships) {
this.groupMemberships = groupMemberships; this.groupMemberships = groupMemberships;
} }

View File

@ -23,6 +23,7 @@ import org.libreccm.core.AbstractEntityRepository;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
import javax.enterprise.context.ApplicationScoped;
import javax.enterprise.context.RequestScoped; import javax.enterprise.context.RequestScoped;
import javax.persistence.EntityGraph; import javax.persistence.EntityGraph;
import javax.persistence.TypedQuery; import javax.persistence.TypedQuery;