安全认证和授权方式:嵌入式Jetty+Jersey
2015-12-29 14:29
399 查看
首先启动一个Server:
其中的JerseyHandler如下:
这里使用的是Jetty自带的安全认证方式:SecurityHandler:
其中的realm.properties的内容如下,其格式为:用户名 : 密码 : 角色1:角色2......
运行如下:
上述代码包装过的ServletContextHandler后的情况下,ws/v1/*的所有路径都必须先经过认证之后才能访问。
下面是web页面的Jetty嵌入式代码:
public HandlerWrapper getWebHandler() {
WebAppContext context = new WebAppContext();
context.setContextPath("/");
context.setDescriptor("hugetable-core/src/main/webapp/WEB-INF/web.xml");
context.setResourceBase("hugetable-core/src/main/webapp");
context.setClassLoader(Thread.currentThread().getContextClassLoader());
context.setParentLoaderPriority(true);
return context;
}
public Server getServer() { Server server = new Server(new InetSocketAddress("localhost", 8081)); ServletContextHandler jerseyHandler = getJerseyHandler(); setSecurity(jerseyHandler); server.setHandler(jerseyHandler); return server; }
其中的JerseyHandler如下:
public ServletContextHandler getJerseyHandler() { ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS); handler.setContextPath("/ws/v1"); //add jersey container ServletHolder jerseyServletHolder = new ServletHolder(ServletContainer.class); jerseyServletHolder.setInitParameter("com.sun.jersey.config.property.resourceConfigClass", "com.sun.jersey.api.core.PackagesResourceConfig"); jerseyServletHolder.setInitParameter("com.sun.jersey.config.property.packages", "rest/resouce"); handler.addServlet(jerseyServletHolder, "/*"); return handler; }
这里使用的是Jetty自带的安全认证方式:SecurityHandler:
private void setSecurity(ServletContextHandler handler) { ConstraintSecurityHandler securityHandler = new ConstraintSecurityHandler(); handler.setSecurityHandler(securityHandler); Constraint constraint = new Constraint(); constraint.setName("auth"); constraint.setAuthenticate(true); constraint.setRoles(new String[]{"user", "admin"}); ConstraintMapping mapping = new ConstraintMapping(); mapping.setPathSpec("ws/v1/*"); mapping.setConstraint(constraint); securityHandler.setConstraintMappings(Collections.singletonList(mapping)); securityHandler.setAuthenticator(new FormAuthenticator()); securityHandler.setLoginService(new HashLoginService("MyRealm","realm.properties")); }
其中的realm.properties的内容如下,其格式为:用户名 : 密码 : 角色1:角色2......
jetty: MD5:164c88b302622e17050af52c89945d44,user admin: CRYPT:adpexzg3FUZAk,server-administrator,content-administrator,admin,user other: OBF:1xmk1w261u9r1w1c1xmq,user plain: plain,user user: password,user
运行如下:
public void run() { Server server = getServer(); try { server.start(); server.join(); } catch (Exception e) { e.printStackTrace(); } }
上述代码包装过的ServletContextHandler后的情况下,ws/v1/*的所有路径都必须先经过认证之后才能访问。
下面是web页面的Jetty嵌入式代码:
public HandlerWrapper getWebHandler() {
WebAppContext context = new WebAppContext();
context.setContextPath("/");
context.setDescriptor("hugetable-core/src/main/webapp/WEB-INF/web.xml");
context.setResourceBase("hugetable-core/src/main/webapp");
context.setClassLoader(Thread.currentThread().getContextClassLoader());
context.setParentLoaderPriority(true);
return context;
}
相关文章推荐
- java对世界各个时区(TimeZone)的通用转换处理方法(转载)
- java-注解annotation
- java-模拟tomcat服务器
- java-用HttpURLConnection发送Http请求.
- java-WEB中的监听器Lisener
- Android IPC进程间通讯机制
- i-jetty环境搭配与编译
- Android Native 绘图方法
- Android java 与 javascript互访(相互调用)的方法例子
- 介绍一款信息管理系统的开源框架---jeecg
- 聚类算法之kmeans算法java版本
- java实现 PageRank算法
- jetty小试
- PropertyChangeListener简单理解
- c++11 + SDL2 + ffmpeg +OpenAL + java = Android播放器
- 插入排序
- 冒泡排序
- 堆排序