zoukankan      html  css  js  c++  java
  • WS服务用户访问控制拦截器

    import java.io.IOException;
    import java.io.InputStream;
    import java.io.OutputStream;
    import java.net.HttpURLConnection;
    import java.util.Arrays;
    import java.util.Map;
    import java.util.Properties;
    
    import org.apache.cxf.binding.soap.interceptor.SoapHeaderInterceptor;
    import org.apache.cxf.configuration.security.AuthorizationPolicy;
    import org.apache.cxf.endpoint.Endpoint;
    import org.apache.cxf.interceptor.Fault;
    import org.apache.cxf.message.Exchange;
    import org.apache.cxf.message.Message;
    import org.apache.cxf.transport.Conduit;
    import org.apache.cxf.ws.addressing.EndpointReferenceType;
    import org.springframework.core.io.Resource;
    
    import com.huawei.support.framework.utils.StreamUtil;
    import com.huawei.support.framework.utils.StringUtil;
    
    public class AuthorizationInterceptor extends SoapHeaderInterceptor
    {
        private Properties props;
        
        /**
         * 配置路径
         */
        private Resource configLocation;
        
        /**
        * @param 对configLocation进行赋值
        */
        public void setConfigLocation(Resource aConfigLocation)
        {
            this.configLocation = aConfigLocation;
        }
        
        private Properties getProps()
        {
            if (null == props)
            {
                props = new Properties();
                InputStream is = null;
                try
                {
                    is = configLocation.getInputStream();
                    props.load(is);
                }
                catch (IOException e)
                {
                    props = null;
                }
                finally
                {
                    StreamUtil.close(is);
                }
            }
            return props;
        }
        
        @Override
        public void handleMessage(Message aMsg) throws Fault
        {
            final AuthorizationPolicy policy = aMsg.get(AuthorizationPolicy.class);
            if (null == policy)
            {
                sendErrorResponse(aMsg, HttpURLConnection.HTTP_UNAUTHORIZED);
                return;
            }
            String userName = policy.getUserName();
            String passwrod = policy.getPassword();
            
            if (StringUtil.isNullOrEmpty(passwrod))
            {
                sendErrorResponse(aMsg, HttpURLConnection.HTTP_UNAUTHORIZED);
                return;
            }
            
            if (!passwrod.equalsIgnoreCase(this.getProps().getProperty(userName)))
            {
                sendErrorResponse(aMsg, HttpURLConnection.HTTP_UNAUTHORIZED);
                return;
            }
            super.handleMessage(aMsg);
        }
        
        private void sendErrorResponse(Message message, int responseCode)
        {
            Message outMessage = getOutMessage(message);
            outMessage.put(Message.RESPONSE_CODE, responseCode);
            
            // Set the response headers          
            Map responseHeaders = (Map) message.get(Message.PROTOCOL_HEADERS);
            
            if (responseHeaders != null)
            {
                responseHeaders.put("WWW-Authenticate",
                        Arrays.asList(new String[] { "Basic realm=realm" }));
                
                responseHeaders.put("Content-Length",
                        Arrays.asList(new String[] { "0" }));
            }
            
            message.getInterceptorChain().abort();
            try
            {
                getConduit(message).prepare(outMessage);
                close(outMessage);
            }
            catch (IOException e)
            {
                e.printStackTrace();
            }
            
        }
        
        private Message getOutMessage(Message inMessage)
        {
            Exchange exchange = inMessage.getExchange();
            Message outMessage = exchange.getOutMessage();
            if (outMessage == null)
            {
                Endpoint endpoint = exchange.get(Endpoint.class);
                outMessage = endpoint.getBinding().createMessage();
                exchange.setOutMessage(outMessage);
            }
            outMessage.putAll(inMessage);
            return outMessage;
        }
        
        private Conduit getConduit(Message inMessage) throws IOException
        {
            Exchange exchange = inMessage.getExchange();
            EndpointReferenceType target = exchange.get(EndpointReferenceType.class);
            Conduit conduit = exchange.getDestination().getBackChannel(inMessage,
                    null,
                    target);
            exchange.setConduit(conduit);
            return conduit;
        }
        
        private void close(Message outMessage) throws IOException
        {
            OutputStream os = outMessage.getContent(OutputStream.class);
            os.flush();
            os.close();
        }
        
    }
  • 相关阅读:
    3:基于乐观锁(两种)控制并发: version、external锁
    4: ES内执行Groovy脚本,做文档部分更新、执行判断改变操作类型
    2 Match、Filter、排序、分页、全文检索、短语匹配、关键词高亮
    第63章 ASP.NET Identity 支持
    第62章 EntityFramework支持
    第61章 IdentityServer Options
    第60章 设备流交互服务
    第59章 IdentityServer交互服务
    第58章 Profile Service
    第57章 GrantValidationResult
  • 原文地址:https://www.cnblogs.com/onlywujun/p/2847800.html
Copyright © 2011-2022 走看看