001
014
015 package com.liferay.portal.security.ac;
016
017 import com.liferay.portal.kernel.exception.PortalException;
018 import com.liferay.portal.kernel.exception.SystemException;
019 import com.liferay.portal.model.User;
020 import com.liferay.portal.security.auth.AccessControlContext;
021 import com.liferay.portal.security.auth.AuthException;
022 import com.liferay.portal.security.auth.AuthVerifierPipeline;
023 import com.liferay.portal.security.auth.AuthVerifierResult;
024 import com.liferay.portal.security.auth.CompanyThreadLocal;
025 import com.liferay.portal.security.auth.PrincipalThreadLocal;
026 import com.liferay.portal.security.permission.PermissionChecker;
027 import com.liferay.portal.security.permission.PermissionCheckerFactoryUtil;
028 import com.liferay.portal.security.permission.PermissionThreadLocal;
029 import com.liferay.portal.service.UserLocalServiceUtil;
030
031 import java.util.Map;
032
033 import javax.servlet.http.HttpServletRequest;
034 import javax.servlet.http.HttpServletResponse;
035
036
039 public class AccessControlImpl implements AccessControl {
040
041 @Override
042 public void initAccessControlContext(
043 HttpServletRequest request, HttpServletResponse response,
044 Map<String, Object> settings) {
045
046 AccessControlContext accessControlContext =
047 AccessControlUtil.getAccessControlContext();
048
049 if (accessControlContext != null) {
050 throw new IllegalStateException(
051 "Authentication context is already initialized");
052 }
053
054 accessControlContext = new AccessControlContext();
055
056 accessControlContext.setRequest(request);
057 accessControlContext.setResponse(response);
058
059 Map<String, Object> accessControlContextSettings =
060 accessControlContext.getSettings();
061
062 accessControlContextSettings.putAll(settings);
063
064 AccessControlUtil.setAccessControlContext(accessControlContext);
065 }
066
067 @Override
068 public void initContextUser(long userId) throws AuthException {
069 try {
070 User user = UserLocalServiceUtil.getUser(userId);
071
072 CompanyThreadLocal.setCompanyId(user.getCompanyId());
073
074 PrincipalThreadLocal.setName(userId);
075
076 PermissionChecker permissionChecker =
077 PermissionCheckerFactoryUtil.create(user);
078
079 PermissionThreadLocal.setPermissionChecker(permissionChecker);
080
081 AccessControlThreadLocal.setRemoteAccess(false);
082 }
083 catch (Exception e) {
084 throw new AuthException(e.getMessage(), e);
085 }
086 }
087
088 @Override
089 public AuthVerifierResult.State verifyRequest()
090 throws PortalException, SystemException {
091
092 AccessControlContext accessControlContext =
093 AccessControlUtil.getAccessControlContext();
094
095 AuthVerifierResult authVerifierResult =
096 AuthVerifierPipeline.verifyRequest(accessControlContext);
097
098 Map<String, Object> authVerifierResultSettings =
099 authVerifierResult.getSettings();
100
101 if (authVerifierResultSettings != null) {
102 Map<String, Object> settings = accessControlContext.getSettings();
103
104 settings.putAll(authVerifierResultSettings);
105 }
106
107 accessControlContext.setAuthVerifierResult(authVerifierResult);
108
109 return authVerifierResult.getState();
110 }
111
112 }