加载有权限控制的ArcGISServer服务

ArcGIS Server服务权限控制

  • 在服务管理页面(http://{host}:{port}/arcgis/manager/security.html)配置好用户与角色
  • 在服务列表页面(http://{host}:{port}/arcgis/manager/)对相应服务进行权限控制
    加载有权限控制的ArcGISServer服务

通过token生成接口获取token

接口地址:http://%s/arcgis/tokens?request=getToken&username=%s&password=%s&expiration=30

编写代码请求接口

  • java代码
public class AgsToken extends HttpServlet {

   private String host,username,pwd;

   @Override
   public void init() throws ServletException {
        host = this.getInitParameter("host");
        username = this.getInitParameter("username");
        pwd = this.getInitParameter("pwd");
   }
   
   @Override
   protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
       String token = getArcGISToken(host,username,pwd);
       OutputStream out = resp.getOutputStream();
       out.write(token.getBytes());
       out.flush();
       out.close();
   }

   private String getArcGISToken(String host, String userName, String pwd){
       String tokenService = String.format("http://%s/arcgis/tokens?request=getToken&username=%s&password=%s&expiration=30", host, userName, pwd);
       String token = "";

       HttpURLConnection connection = null;
       InputStream is = null;
       BufferedReader br = null;
       try {
           URL url = new URL(tokenService);
           connection = (HttpURLConnection) url.openConnection();
           connection.setRequestMethod("GET");
           connection.setConnectTimeout(15000);
           connection.setReadTimeout(60000);
           connection.connect();
           if (connection.getResponseCode() == 200) {
               is = connection.getInputStream();
               br = new BufferedReader(new InputStreamReader(is, "UTF-8"));
               StringBuffer sbf = new StringBuffer();
               String temp = null;
               while ((temp = br.readLine()) != null) {
                   sbf.append(temp);
//                    sbf.append("\r\n");
               }
               token = sbf.toString();
           }
       } catch (MalformedURLException e) {
           e.printStackTrace();
       } catch (IOException e) {
           e.printStackTrace();
       } catch (Exception e){
           e.printStackTrace();
       }finally {
           // 关闭资源
           if (null != br) {
               try {
                   br.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
           if (null != is) {
               try {
                   is.close();
               } catch (IOException e) {
                   e.printStackTrace();
               }
           }
           connection.disconnect();
       }
       return token;
   }
}

  • web.xml配置
<servlet>
        <servlet-name>agstoken</servlet-name>
        <servlet-class>com.abc.AgsToken</servlet-class>
        <init-param>
            <param-name>username</param-name>
            <param-value>a</param-value>
        </init-param>
        <init-param>
            <param-name>pwd</param-name>
            <param-value>1</param-value>
        </init-param>
        <init-param>
            <param-name>host</param-name>
            <param-value>192.98.8.153:6080</param-value>
        </init-param>
    </servlet>
    <servlet-mapping>
        <servlet-name>agstoken</servlet-name>
        <url-pattern>/token</url-pattern>
    </servlet-mapping>
  • 前端openlayers请求服务
   $.get("/web/token",function (re) {
         var agslayer = layer.getAGSRestLayer("http://192.98.8.153:6080/arcgis/rest/services/test/tta/MapServer",re);
         map.addLayer(agslayer);
   });

   var getAGSRestLayer = function (url,token) {
       var source = null;
       if(token){
           source = new ol.source.TileArcGISRest({
               // projection:'EPSG:3785',
               url:url,
               params: {   //带权限的arcgis服务
                   token: token
               }
           });
       }else{
           source = new ol.source.TileArcGISRest({
               url:url
           });
       }
       var lyr = new ol.layer.Tile({
           source:source
       });
       return lyr;
   };