001    /*
002     * Copyright 2011 The Kuali Foundation.
003     * 
004     * Licensed under the Educational Community License, Version 2.0 (the "License");
005     * you may not use this file except in compliance with the License.
006     * You may obtain a copy of the License at
007     * 
008     * http://www.opensource.org/licenses/ecl2.php
009     * 
010     * Unless required by applicable law or agreed to in writing, software
011     * distributed under the License is distributed on an "AS IS" BASIS,
012     * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
013     * See the License for the specific language governing permissions and
014     * limitations under the License.
015     */
016    package org.kuali.kfs.sec.web.struts;
017    
018    import java.text.MessageFormat;
019    
020    import javax.servlet.http.HttpServletRequest;
021    import javax.servlet.http.HttpServletResponse;
022    
023    import org.apache.commons.lang.StringUtils;
024    import org.apache.struts.action.ActionForm;
025    import org.apache.struts.action.ActionForward;
026    import org.apache.struts.action.ActionMapping;
027    import org.apache.struts.config.ExceptionConfig;
028    import org.kuali.kfs.sec.SecConstants;
029    import org.kuali.kfs.sec.SecKeyConstants;
030    import org.kuali.kfs.sec.businessobject.AccessSecurityRestrictionInfo;
031    import org.kuali.kfs.sys.KFSConstants;
032    import org.kuali.kfs.sys.context.SpringContext;
033    import org.kuali.rice.kns.service.KualiConfigurationService;
034    import org.kuali.rice.kns.util.GlobalVariables;
035    import org.kuali.rice.kns.web.struts.pojo.StrutsExceptionIncidentHandler;
036    
037    
038    /**
039     * Checks for security access exception and forwards to security access error page
040     */
041    public class SecurityExceptionIncidentHandler extends StrutsExceptionIncidentHandler {
042    
043        /**
044         * @see org.kuali.rice.kns.web.struts.pojo.StrutsExceptionIncidentHandler#execute(java.lang.Exception, org.apache.struts.config.ExceptionConfig,
045         *      org.apache.struts.action.ActionMapping, org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
046         */
047        @Override
048        public ActionForward execute(Exception exception, ExceptionConfig exceptionConfig, ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) {
049            AccessSecurityRestrictionInfo restrictionInfo = (AccessSecurityRestrictionInfo) GlobalVariables.getUserSession().retrieveObject(SecConstants.OPEN_DOCUMENT_SECURITY_ACCESS_DENIED_ERROR_KEY);
050            if (restrictionInfo != null) {
051                String accessMessage = SpringContext.getBean(KualiConfigurationService.class).getPropertyString(SecKeyConstants.MESSAGE_OPEN_DOCUMENT_RESTRICTED);
052                accessMessage = StringUtils.replace(accessMessage, "{0}", GlobalVariables.getUserSession().getPrincipalName());
053                accessMessage = StringUtils.replace(accessMessage, "{1}", restrictionInfo.getDocumentNumber());
054                accessMessage = StringUtils.replace(accessMessage, "{2}", restrictionInfo.getPropertyLabel());
055                accessMessage = StringUtils.replace(accessMessage, "{3}", restrictionInfo.getRetrictedValue());
056                request.setAttribute(SecConstants.ACCESS_ERROR_STRING_REQUEST_KEY, accessMessage);
057    
058                GlobalVariables.getUserSession().removeObject(SecConstants.OPEN_DOCUMENT_SECURITY_ACCESS_DENIED_ERROR_KEY);
059    
060                return mapping.findForward(SecConstants.ACCESS_DENIED_ERROR_FORWARD);
061            }
062    
063            return super.execute(exception, exceptionConfig, mapping, form, request, response);
064        }
065    
066    }