Realm 是什么,干嘛的。我这里就不说了
讲讲怎样配置Realm
<Realm className="org.apache.catalina.realm.JDBCRealm" debug="99"
driverName="oracle.jdbc.driver.OracleDriver"
connectionURL="jdbc:oracle:thin:@192.168.9.172:1521:yfzx"
connectionName="bi"
connectionPassword="bi"
userTable="users" userNameCol="user_name" userCredCol="passwd"
userRoleTable="user_roles" roleNameCol="role_name"/>
className 请求提交到这个class
driverName 驱动名
connectionURL 数据库URL
connectionName 账户
connectionPassword 数据库密码
userTable 用户表名
userNameCol 用户名涉及表的列
userCredCol 用户密码涉及表列
userRoleTable 角色表,这个一般和用户表相关联
roleNameCol 这个就是角色名
Tomcat 最终通过查询出rolename来决定你的访问权限。
在/WEB-INF/web.xml里面配置
<security-constraint>
<display-name>OpenI Security Constraint</display-name>
<web-resource-collection>
<web-resource-name>Protected Area</web-resource-name>
<url-pattern>*.jsp</url-pattern>
<url-pattern>*.html</url-pattern>
<url-pattern>*.htm</url-pattern>
<url-pattern>*.iface</url-pattern>
<url-pattern>*.faces</url-pattern>
<url-pattern>*.jspx</url-pattern>
<url-pattern>*.xml</url-pattern>
<url-pattern>/rss</url-pattern>
<url-pattern>/StreamChart</url-pattern>
</web-resource-collection>
<auth-constraint>
<role-name>openi</role-name>
</auth-constraint>
</security-constraint>
以上是指定 role_name为openi的用户可以访问 web-resource-collection 标签里面的所有 url-pattern
然后配置登陆异常的页面了
<login-config>
<auth-method>FORM</auth-method>
<realm-name>OpenI 2.0</realm-name>
<form-login-config>
<form-login-page>/login.jsp</form-login-page>
<form-error-page>/login.jsp?login_failed</form-error-page>
</form-login-config>
</login-config>
差不多就这样,但是实际中远远不止这么些
如:我们一般再增加一个自己的Filter来获得认证后的用户具体信息
<filter>
<filter-name>AuthorizationFilter</filter-name>
<filter-class>org.openi.security.AuthorizationFilter</filter-class>
<init-param>
<param-name>project_list_page</param-name>
<param-value>projectlist.htm</param-value>
</init-param>
</filter>
上面是自定义的Filter
<filter>
<filter-name>WcfJspFilter</filter-name>
<filter-class>org.openi.web.RequestFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<url-pattern>*.iface</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<url-pattern>*.faces</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<url-pattern>*.jspx</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>AuthorizationFilter</filter-name>
<url-pattern>*.htm</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>LogoutFilter</filter-name>
<url-pattern>/killsession</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>WcfJspFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
对相关的url访问过滤,在登陆成功之后 转向主页面时候会通过这个Filter
package org.openi.security;
import java.io.IOException;
import java.util.Enumeration;
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.log4j.Logger;
import org.openi.application.Application;
import org.openi.project.ProjectContext;
import org.openi.users.User;
import org.openi.users.UserService;
import org.springframework.context.ApplicationContext;
import org.springframework.web.context.support.WebApplicationContextUtils;
public class AuthorizationFilter implements Filter {
//private static final String APP_FILE_PATH = "/WEB-INF/application.xml";
private static Logger logger = Logger.getLogger(AuthorizationFilter.class);
private FilterConfig filterConfig;
public void init(FilterConfig filterConfig) {
this.filterConfig = filterConfig;
}
public static final String OPENI_ROLE_NAME = "openi";
public static final String APP_ADMIN_ROLE_NAME = "app_admin";
public void doFilter(ServletRequest request, ServletResponse response,
FilterChain chain) throws IOException, ServletException {
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(filterConfig.getServletContext());
ProjectContext projectContext = (ProjectContext)appContext.getBean("projectContext");
//request.setCharacterEncoding("UTF-8");
/*
Enumeration names = request.getParameterNames();
while(names.hasMoreElements()) {
String name = (String)names.nextElement();
String values[] = request.getParameterValues(name);
for(int i=0;i<values.length;i++)
{
values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");//(values[i]);
}
}
*/
HttpServletRequest servletRequest = (HttpServletRequest) request;
/*logger.info("---------------------servletRequest.getRequestURI() : " + servletRequest.getRequestURI());
logger.info("---------------------servletRequest.getCharacterEncoding() : " + servletRequest.getCharacterEncoding());
logger.info("---------------------servletRequest.getAttribute() : " + servletRequest.getAttribute("content"));
logger.info("---------------------servletRequest.getParameter() : " + servletRequest.getParameter("content"));
logger.info("---------------------servletRequest.getParameter(contentNow) : " + servletRequest.getParameter("contentNow"));
logger.info("---------------------servletRequest.getQueryString() : " + servletRequest.getQueryString());
logger.info("---------------------servletRequest.getRequestURI() : " + servletRequest.getRequestURL().toString());
logger.info("---------------------servletRequest.getServletPath() : " + servletRequest.getServletPath());
;
*/
// Glashfish invokes request filter before login, so check UserPrincipal for null
if (projectContext.getUser() == null && servletRequest.getUserPrincipal() != null) {
String userName = servletRequest.getUserPrincipal().getName();
User user = null;
try {
UserService userService = (UserService)appContext.getBean("userService");
if (userService != null) {
user = userService.getUserById(userName);
}
} catch (Throwable t) {}
if (user == null) {
user = new User();
}
if (user.getLanguage() == null || "".equals(user.getLanguage())) {
user.setLanguage(servletRequest.getLocale().getLanguage());
}
user.setName(userName);
projectContext.setUser(user);
if (servletRequest.isUserInRole(OPENI_ROLE_NAME)) {
if (servletRequest.isUserInRole(APP_ADMIN_ROLE_NAME)) {
projectContext.configureRoles(true, false, false);
}/* else if (projectContext.getProject() != null
&& servletRequest.isUserInRole(projectContext.getProject().getProjectId() + " )) {
if (servletRequest.isUserInRole(PRJ_ADMIN_ROLE_NAME)) {
projectContext.configureRoles(false, true, false);
} else if (servletRequest.isUserInRole(PRJ_USER_ROLE_NAME)) {
projectContext.configureRoles(false, false, true);
}
}*/
}
}
if (projectContext.getProject() == null && servletRequest.getUserPrincipal() != null) {
try {
if (!Application.isLoaded()) {
((HttpServletRequest)request).getRequestDispatcher("/WEB-INF/pages/create_project.iface").forward(request, response);
return;
} else {
logger.warn("project content directory is missing");
if(!servletRequest.getRequestURI().endsWith("project_list.iface")
&& !servletRequest.getRequestURI().endsWith("blank.iface")){
((HttpServletResponse)response).sendRedirect("project_list.iface");
//((HttpServletRequest)request).getRequestDispatcher("project_list.iface").forward(request, response);
return;
}
}
} catch (Exception e) {
throw new ServletException("could forward request", e);
}
}
/*
Enumeration names1 = request.getParameterNames();
while(names1.hasMoreElements()) {
String name = (String)names1.nextElement();
String values[] = request.getParameterValues(name);
for(int i=0;i<values.length;i++)
{
values[i] = new String(values[i].getBytes("ISO-8859-1"),"utf-8");//(values[i]);
}
}
*/
chain.doFilter(request, response);
}
public void destroy() {
}
}
通过上面这个类就可以获得用户的具体信息,从而得到细粒度的控制。
完毕。高手不吝赐教!
分享到:
相关推荐
通常,Tomcat使用`MemoryRealm`或`UserDatabaseRealm`,但为了使用JAAS,你需要改为`JAASRealm`。例如: ```xml <Realm className="org.apache.catalina.realm.JAASRealm" appName="myApp" userClassNames=...
【标题】"使用Tomcat验证LDAP by openDJ" 涉及到的知识点主要集中在两个核心领域:Apache Tomcat服务器和 Lightweight Directory Access Protocol (LDAP)。在这个场景中,openDJ作为一个开源的LDAP服务器,用于存储...
【标题】"Tomcat7.0.42源码,eclipse直接使用" 【内容】: Tomcat7.0.42是Apache Tomcat服务器的一个版本,它是一个开源的Java Servlet容器,主要用于实现Java Servlet和JavaServer Pages(JSP)技术。这个版本的...
同时,熟悉Tomcat的安全设置,如用户角色、 Realm配置以及防火墙规则,是确保服务器安全运行的关键。 总之,Tomcat 8是一个强大且灵活的Java Web服务器,适用于开发、测试和生产环境。无论是在Windows还是Linux上,...
2. **线程模型**:Tomcat使用了多线程模型来处理并发请求。源码中的`Catalina`和` Coyote`组件涉及到了这部分内容,包括Acceptor线程和Worker线程的管理。 3. **生命周期管理**:每个Tomcat组件都有自己的生命周期...
下面将详细介绍Tomcat 8的主要特性和使用方法。 1. **主要特性** - **轻量级**:Tomcat 8是轻量级的服务器,占用资源少,适合小型到中型的应用。 - **遵循标准**:完全支持Java Servlet 3.1和JSP 2.3规范,为开发...
开发者可以使用Realm组件进行身份验证,定义AccessControlList来控制访问权限。 在学习Tomcat API时,阅读官方文档和示例代码是十分重要的。对于英文基础良好的开发者来说,直接阅读API文档能更深入地理解Tomcat的...
Realm是Tomcat中的一个组件,负责身份验证和权限控制。这里使用的是JNDIRealm,即Java Naming and Directory Interface Realm,它可以连接到LDAP服务器并进行身份验证。 Realm元素的各个属性的解释: * className...
- **server.xml**:这是Tomcat的主要配置文件,包含了关于连接器、监听器、 Realm(认证)和其他服务器设置的信息。 - **web.xml**:每个Web应用都有一个web.xml,用于定义Servlet、过滤器和监听器等。 - **...
在conf/server.xml中,你可以配置Realm(域)来管理用户和角色,并使用Context元素设置应用级别的安全性。 管理Tomcat可以通过管理工具实现,例如Tomcat管理员(位于http://localhost:8080/manager/html)和Host ...
Tomcat是一款广泛使用的开源Java应用服务器,主要用于部署和运行Servlet和JSP应用。本文将深入探讨Tomcat的配置方法,帮助你更好地理解和管理你的Web应用。 首先,让我们从基础开始,了解Tomcat的目录结构。在解压...
Apache Tomcat 6.0.37 是一个广泛使用的开源软件,它是一个符合Java Servlet和JavaServer Pages(JSP)规范的应用服务器,专门用于运行基于Java的Web应用程序。Tomcat作为轻量级的Web服务器和应用服务器,因其简单、...
Apache Tomcat 8.0.35 是一个广泛使用的开源软件,它是一个实现了Java Servlet、JavaServer Pages(JSP)和Java EE的Web应用程序容器。这个版本是专门为在Windows操作系统环境下运行而设计的,特别是针对x86架构的...
此外,Tomcat 7加强了安全管理,如增强的 Realm 配置,为开发者提供了更强大的安全控制。 再往后,Tomcat 8.x系列则顺应了Java EE 7的发展,支持Servlet 3.1、JSP 2.3以及WebSocket等新特性。这个版本的Tomcat在...
Tomcat7是一款广泛使用的开源Java Servlet容器,它实现了Java EE中的Web应用服务器标准,尤其是Servlet和JSP规范。源码下载是开发者深入理解其内部工作原理的重要途径,本篇文章将围绕Tomcat7源码进行详细探讨。 一...
7. **安全性**:Tomcat的安全配置主要涉及`conf/server.xml`中的`<Realm>`元素,以及`conf/context.xml`和应用级别的`WEB-INF/web.xml`中的安全约束。SSL/TLS可以通过配置`server.xml`中的`<Connector>`元素启用,以...
6. **安全管理**:Tomcat提供了基于角色的访问控制(RBAC),可以在`conf/tomcat-users.xml`文件中定义用户和角色,通过`<Realm>`元素配置认证方式。 7. **JNDI资源**:Tomcat支持JNDI(Java Naming and Directory ...
2. **线程池管理**:Tomcat如何使用Executor(`Executor`接口和`ThreadPoolExecutor`实现)来管理线程,提高并发性能。 3. **会话管理**:Tomcat如何实现Session跟踪,包括Cookie、URL重写和基于数据库的持久化策略...
1. **用户角色与Realm**:Tomcat支持多种Realm实现,如MemoryRealm(内存中存储用户信息)、JDBCRealm(通过数据库验证用户)等,可以定义不同角色的访问权限。 2. **Web应用程序安全配置**:在web.xml中配置...
7. **安全管理**:Tomcat允许配置 Realm 来进行用户身份验证,如`conf/tomcat-users.xml`,并可以通过`web.xml`定义角色和安全约束。 8. **集群与负载均衡**:Tomcat 6.0支持集群配置,通过复制会话数据实现多台...