How to Configure Security with Embedded Jetty
This example shows you how to setup web application security programmatically. Firstly, we'll look at how to do it if you use a web.xml file to declare your <security-constraint>s on urls within your webapp. Then, we'll show you how to do it in code instead, so that you don't even need to have a web.xml file.
For both of these examples, we need to configure jetty with a Realm. A Realm represents the runtime security environment - the users, their credentials and their roles. Jetty has a number of different Realm implementations:
org.mortbay.jetty.security.HashUserRealm obtains information from a properties file
org.mortbay.jetty.security.JDBCUserRealm obtains information from a database
org.mortbay.jetty.plus.jaas.JAASUserRealm uses JAAS for authentication and authorization
For these examples, we'll be using the org.mortbay.jetty.security.HashUserRealm. There is an example of a properties file for this Realm type in $jetty.home/etc/realm.properties.
We'll be using BASIC authentication for this example, but you can also set up FORM authentication in a similar way.
Using a web.xml file for security-constraints
If you're able to use a WEB-INF/web.xml file, you should configure it to use BASIC authentication, and to specify some urls that have security constraints. Here's an example:
<web-app>
...
<security-constraint>
<web-resource-collection>
<web-resource-name>A Protected Page</web-resource-name>
<url-pattern>/*</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>admin</role-name>
<role-name>user</role-name>
<role-name>moderator</role-name>
</auth-constraint>
</security-constraint>
...
<login-config>
<auth-method>BASIC</auth-method>
<realm-name>MyRealm</realm-name>
</login-config>
...
</web-app>
It is important to note the <realm-name>MyRealm</realm-name>. This is the linkage to the jetty Realm (a HashUserRealm in this instance). You'll specify this same name when you set up the Realm. Here's the code you need:
Server server = new Server();
Connector connector = new SelectChannelConnector();
connector.setPort(8080);
server.setConnectors(new Connector[]{connector});
WebAppContext webappcontext = new WebAppContext();
webappcontext.setContextPath("/mywebapp");
webappcontext.setWar("./path/to/my/war/orExplodedwar");
HandlerCollection handlers= new HandlerCollection();
handlers.setHandlers(new Handler[]{webappcontext, new DefaultHandler()});
server.setHandler(handlers);
HashUserRealm myrealm = new HashUserRealm("MyRealm",System.getProperty("jetty.home")+"/etc/realm.properties");
server.setUserRealms(new UserRealm[]{myrealm});
server.start();
server.join();
Programmatic security constraints (no web.xml)
If you don't wish to use a web.xml file, you can specify your <security-constraint>s in code instead. Here's how we'd code the same security constraints for the web.xml file above:
import org.mortbay.jetty.security.*;
Server server = new Server();
Connector connector = new SelectChannelConnector();
connector.setPort(8080);
server.setConnectors(new Connector[]{connector});
Constraint constraint = new Constraint();
constraint.setName(Constraint.__BASIC_AUTH);;
constraint.setRoles(new String[]{"user","admin","moderator"});
constraint.setAuthenticate(true);
ConstraintMapping cm = new ConstraintMapping();
cm.setConstraint(constraint);
cm.setPathSpec("/*");
SecurityHandler sh = new SecurityHandler();
sh.setUserRealm(new HashUserRealm("MyRealm",System.getProperty("jetty.home")+"/etc/realm.properties"));
sh.setConstraintMappings(new ConstraintMapping[]{cm});
WebAppContext webappcontext = new WebAppContext();
webappcontext.setContextPath("/mywebapp");
webappcontext.setWar("./path/to/my/war/orExplodedwar");
webappcontext.addHandler(sh);
HandlerCollection handlers= new HandlerCollection();
handlers.setHandlers(new Handler[]{webappcontext, new DefaultHandler()});
server.setHandler(handlers);
server.start();
server.join();
Running
Assuming you deployed a webapp at the context path /mywebapp by running your application, then surfing to:
http://localhost:8080/mywebapp
will cause a dialog box to pop up prompting you for your username and password. This is how BASIC authentication obtains your authentication information.
The example properties file in $jetty.home/etc/realm.properties defines the following users and their roles:
user jetty with role user
user admin with roles server-administrator,content-administrator,admin
Our security constraint only allows users in these roles to access it:
admin
user
moderator
Therefore, using the default $jetty.home/etc/realm.properties, only the users:
jetty
admin
would be able to access any of the pages protected by the <security-constraint> in the webapp.
Therefore, you would log in as either the user jetty or the user admin (with passwords jetty and admin respectively) to be able to access the webapp.
分享到:
相关推荐
9. **安全性**:通过插件配置,可以集成Jetty的安全特性,如用户认证、角色管理和SSL加密,以保护开发环境中的敏感数据。 10. **插件管理**:在Maven的`pom.xml`文件中,可以控制Jetty插件的版本,确保与项目中其他...
9. **安全性**:Jetty提供了安全模块,支持基本的认证机制,如HTTP Basic和Digest,以及SSL/TLS加密,确保数据传输的安全性。 10. **Maven插件**:对于使用Maven构建项目的开发者来说,Jetty还提供了Maven插件,...
5. **jetty-security.jar**:用于处理安全性和认证,包含Jaas登录服务、BasicAuthenticator等。 6. **jetty-util.jar**:这是Jetty的一般工具类库,提供了许多实用工具,如异步事件处理、线程池、URL处理等。 7. *...
8. **jetty-security**:提供身份验证和授权功能,支持基本认证、表单认证等安全机制。 9. **jetty-util**:包含各种通用工具类和实用程序,方便开发。 10. **示例和文档**:压缩包中可能还包含一些示例应用程序和...
7. **安全性和认证**:Jetty提供了强大的安全框架,支持多种认证机制,如基本认证、摘要认证、表单认证等,同时支持SSL/TLS加密,确保数据传输的安全。 8. **模块化设计**:Jetty采用模块化设计,用户可以根据需要...
在安全性方面,Jetty提供了内置的SSL/TLS支持,可以方便地配置和管理证书,确保Web应用的数据传输安全。并且,它与Java的JASPI(Java Authentication and Authorization Service)接口兼容,允许用户集成各种认证和...
- **更好的安全管理**:提供了更完善的用户认证和授权机制,增强了安全性。 3. **使用Jetty在安卓上的应用**: - **移动Web服务**:Jetty可以在安卓设备上搭建本地Web服务器,用于提供API接口或者离线Web应用。 ...
6. **安全与认证**:Jetty支持多种安全模型,包括基本认证、Digest认证以及SSL/TLS加密。可以在配置文件中设置角色和用户,以实现Web应用的安全访问。 7. **性能优化**:Jetty提供了很多优化选项,例如调整线程池...
8. **jetty-security-9.2.13.v20150730.jar**:提供了安全相关的功能,如基本认证、表单认证以及SSL/TLS加密。 9. **javax.servlet-api-3.1.0.jar**:这是Servlet 3.1规范的API接口定义,允许在Jetty上运行兼容该...
5. **安全性**:Virgo-jetty-server可能包含了安全相关的组件,如用户认证、授权和会话管理,以保护应用免受未经授权的访问。 6. **扩展性**:Virgo服务器和Jetty都具有良好的扩展性,可以通过添加新的模块或插件来...
Jetty Security 9.3.10.M0是Jetty服务器的一个版本,专注于安全性方面的功能。...这个特定的版本9.3.10.M0...对于希望深入了解Jetty安全机制或者需要定制相关功能的开发者来说,这个开源项目提供了丰富的资源和可能性。
6. **安全**:Jetty提供了强大的安全特性,包括基本认证、Digest认证、SSL/TLS支持以及会话管理。默认配置下,用户需要根据自己的需求进行安全设置,以确保应用的安全性。 7. **性能优化**:Jetty以其高效的内存...
安全性方面,Jetty支持基本的认证机制,如HTTP Basic Auth和Form-based Auth,还可以通过集成Spring Security等框架来实现更复杂的权限管理。 总的来说,Jetty 8.1.21作为一个成熟的Web服务器和Servlet容器,提供了...
7. **安全特性**:该开发包中包含了安全模块,如JAAS(Java Authentication and Authorization Service)支持,用于实现用户认证和权限控制。Jetty还支持HTTPS和SSL/TLS加密,确保数据传输的安全性。 8. **集成性**...
7. **安全特性**:Jetty支持多种认证机制,如Basic Auth、Digest Auth、Form Auth等,并且提供了SSL/TLS加密功能,保障了通信的安全性。 8. **性能优化**:Jetty团队不断进行性能优化,确保Jetty在处理请求、响应和...
7. **安全特性**:Jetty 9提供了强大的安全特性,如基本认证、digest认证、SSL/TLS加密以及基于角色的访问控制,确保了Web应用的安全性。 8. **部署与热更新**:Jetty支持war文件的自动部署和热更新,开发者可以...
7. **安全性**:Jetty提供了安全模块,支持多种认证机制,如Basic Auth、Digest Auth和Form Auth,以及SSL/TLS加密,确保了Web应用的数据安全。 8. **WebSocket支持**:Jetty 9.4.6版本支持WebSocket协议,允许双向...
8. **安全特性**:Jetty提供了基本的安全管理,包括角色认证、SSL/TLS支持和基于容器的身份验证。在8.1.8.v20121106中,开发者可以配置这些特性来保护他们的Web应用程序。 9. **JMX支持**:Jetty通过Java ...
使用Acegi Security时,开发者需要配置安全上下文(Security Context),定义访问控制规则,以及设置用户认证和授权的策略。在Jetty环境中,Acegi Security的配置可能涉及到创建自定义的过滤器链,这些过滤器会在...
在实际使用中,开发者需要配置Acegi Security的相关bean以定义安全策略,并在Jetty服务器的启动脚本或配置文件中指定Acegi Security的过滤器,以确保在请求到达Servlet之前进行身份验证和授权检查。此外,可能还需要...