设为首页 收藏本站
查看: 513|回复: 0

[经验分享] Tomcat Realm的使用

[复制链接]

尚未签到

发表于 2017-1-26 13:35:53 | 显示全部楼层 |阅读模式
  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 = new String(values.getBytes("ISO-8859-1"),"utf-8");//(values);
}
}
*/
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 = new String(values.getBytes("ISO-8859-1"),"utf-8");//(values);
}
}
*/
chain.doFilter(request, response);
}
public void destroy() {
}

}

  通过上面这个类就可以获得用户的具体信息,从而得到细粒度的控制。
  完毕。高手不吝赐教!

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-333752-1-1.html 上篇帖子: tomcat 6的JIoEndpoint 下篇帖子: Android与Tomcat远程访问
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表