`
peterwanghao
  • 浏览: 128489 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

使用Apache Shiro进行身份认证

 
阅读更多

本文介绍了如何在WEB应用中使用Shiro进行身份认证。

在web.xml文件中配置一个Servlet ContextListener的监听器和Filter过滤器。

<listener>
		<listener-class>org.apache.shiro.web.env.EnvironmentLoaderListener</listener-class>
	</listener>
	<filter>
		<filter-name>ShiroFilter</filter-name>
		<filter-class>org.apache.shiro.web.servlet.ShiroFilter</filter-class>
	</filter>

	<filter-mapping>
		<filter-name>ShiroFilter</filter-name>
		<url-pattern>/login.do</url-pattern>
	</filter-mapping>

JSP页面提交用户名和口令。

<FORM name="form1" action="login.do" method="POST">
	<TABLE cellSpacing=0 cellPadding=0 align=center
		border=0>
		<TBODY>
			<TR>
				<TD width=250>
					<TABLE cellSpacing=3 cellPadding=0 border=0>
						<TBODY>
							<TR>
								<TD width=90><IMG height=29
									src="images/title_yhm.gif" width=90></TD>
								<TD><INPUT class=logininput name=loginName>
								</TD>
							</TR>
							<TR>
								<TD width=90><IMG height=27
									src="images/title_mima.gif" width=90></TD>
								<TD><INPUT class=logininput type=password
									name=password></TD>
							</TR>
							<TR>
								<TD width=90></TD>
								<TD align="right"></TD>
							</TR>
						</TBODY>
					</TABLE>
				</TD>
				<TD vAlign=top>
					<TABLE cellSpacing=6 cellPadding=0 border=0>
						<TBODY>
							<TR>
								<TD><IMG style="CURSOR: hand"
									onclick=doSubmit() height=35
									src="images/button_login.gif" width=77
									border=0></TD>
							</TR>
						</TBODY>
					</TABLE>
				</TD>
			</TR>
		</TBODY>
	</TABLE>
</FORM>

Shiro的配置文件,/WEB-INF/Shiro.ini。

main]
ds = com.mysql.jdbc.jdbc2.optional.MysqlDataSource  
ds.serverName = 127.0.0.1
ds.user = root
ds.password = 123456
ds.databaseName = shiro  
ds.url = jdbc:mysql://127.0.0.1:3306/shiro  
jdbcRealm = org.apache.shiro.realm.jdbc.JdbcRealm  
jdbcRealm.permissionsLookupEnabled = true  
jdbcRealm.authenticationQuery = SELECT password FROM user_credence_information WHERE username = ?  
jdbcRealm.dataSource = $ds

shiro.loginUrl = /login.jsp

[users]
# format: username = password, role1, role2, ..., roleN


[roles]
# format: roleName = permission1, permission2, ..., permissionN

[urls]
# The /login.jsp is not restricted to authenticated users (otherwise no one could log in!), but
# the 'authc' filter must still be specified for it so it can process that url's
# login submissions. It is 'smart' enough to allow those requests through as specified by the
# shiro.loginUrl above.
/success.jsp = authc

服务端认证程序。

public class LoginController implements Controller {
	private static final Log log = LogFactory.getLog(LoginController.class);
	protected ErrMg error;

	public ModelAndView doReturnError(HttpServletRequest request,
			HttpServletResponse response, ErrMg message, String errpath) {
		request.setAttribute("Error_Message", message);
		return new ModelAndView(errpath);

	}
	
	public ModelAndView handleRequest(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		String loginName = request.getParameter("loginName");
		String loginPwd = request.getParameter("password");
		log.info("用户认证开始:" + loginName + " , " + loginPwd);
		String userid = null;
		String username = null;
		error = new ErrMg();
		AuthenticationToken token = new UsernamePasswordToken(loginName,
				loginPwd);
		Subject currentUser = SecurityUtils.getSubject();
		try {
			currentUser.login(token);
			userid = (String)currentUser.getPrincipal();
			log.info( "User [" + currentUser.getPrincipal() + "] logged in successfully." );
			log.info("用户认证完毕:" + loginName + " , " + userid);
			HttpSession session = request.getSession(true);
			session.setAttribute("USERINFORMATION", userid);
			session.setAttribute("USERNAME", userid);
			return new ModelAndView("success.jsp");
		} catch (UnknownAccountException uae) {
			log.info("用户认证失败:" + "username wasn't in the system.");
			error.setErrorMessage("username wasn't in the system.");
		} catch (IncorrectCredentialsException ice) {
			log.info("用户认证失败:" + "password didn't match.");
			error.setErrorMessage("password didn't match.");
		} catch (LockedAccountException lae) {
			log.info("用户认证失败:" + "account for that username is locked - can't login.");
			error.setErrorMessage("account for that username is locked - can't login.");
		} catch (AuthenticationException ae) {
			log.info("用户认证失败:" + "unexpected condition.");
			error.setErrorMessage("unexpected condition.");
		}
		
		return this.doReturnError(request, response, error, "error.jsp");
	}

}



分享到:
评论

相关推荐

    Apache Shiro教程

    Apache Shiro是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等功能。这个教程将帮助你深入理解和有效地使用Shiro框架。在本文中,我们将详细探讨Shiro的核心概念、主要功能和常见用法...

    Apache shiro 1.13.0源码

    首先,Shiro 的核心组件包括身份认证(Authentication)、授权(Authorization)和会话管理(Session Management)。身份认证是指验证用户的身份,通常涉及用户名和密码的校验;授权则是确定用户是否有权限执行特定...

    Apache_Shiro_使用手册(一)Shiro架构介绍

    Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较于其他安全框架,Shiro 在设计上更为简洁明了,便于开发者的理解和使用...

    Apache Shiro 身份认证例子-源码

    Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了身份认证、授权、加密和会话管理功能,让开发人员可以轻松地在应用中处理安全性问题。本资源包含了一个 Apache Shiro 的身份认证例子的源码,这对于理解和...

    Apache shiro1.2.4反序列化漏洞介绍.docx

    Apache Shiro是一个全面的Java安全框架,用于处理应用程序的安全需求,包括身份验证、授权、密码管理和会话管理。它的核心功能之一是“RememberMe”服务,该服务允许用户在关闭浏览器后仍然保持登录状态,无需在下次...

    apache shiro maven包

    Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权。在本文中,了解 Apache Shiro 并通过示例来在一个 Groovy web 应用程序中尝试使用 Shiro 进行身份验证和授权

    Apache Shiro中文版使用手册

    ### Apache Shiro 使用手册知识点详解 #### 一、Apache Shiro 概述 **1.1 什么是 Apache Shiro** Apache Shiro 是一款强大的 Java 安全框架,它集成了认证、授权、加密和会话管理等功能。这些功能使得 Shiro 成为...

    Apache Shiro中文开发文档.pdf

    - **定义**:Apache Shiro 是一款强大且灵活的开源安全框架,它致力于简化应用程序的安全性问题,包括身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)以及加密(Cryptography)...

    apache shiro 管理用户权限与数据库交互

    Apache Shiro是一个强大且易用的Java安全框架,它提供了身份验证、授权、加密和会话管理等功能。本文将深入探讨如何使用Apache Shiro管理用户权限,并与数据库进行交互,以便实现动态、灵活的安全策略。 ### 一、...

    Apache Shiro身份验证绕过漏洞(CVE-2020-13933)

    直接使用java -jar srping....war命令运行即可 执行之后,访问http://主机的IP:8888/admin/*或者http://主机的IP:8888/login

    apache shiro 实例

    1. **认证**:Shiro 提供了用户身份验证的能力,即验证用户是否为他们声称的身份。这包括用户名和密码的验证,可以通过自定义 Realm 实现与数据库或其他数据源的交互。例如,在 `spring_security.sql` 文件中可能...

    让Apache Shiro保护你的应用

    1. **认证(Authentication)**:验证用户的身份,通常涉及用户登录过程。 2. **授权(Authorization)**:实施访问控制,确保用户只能访问他们被授权的资源。 3. **密码加密(Cryptography)**:通过加密技术保护...

    Apache Shiro 集成-spring

    Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。Shiro 不仅可以用于Java Web 应用,也可以用于独立的Java应用。在集成Spring时,Shiro ...

    Apache Shiro 身份验证绕过漏洞安全风险通告

    Apache Shiro 身份验证绕过漏洞安全风险通告

    spring mvc、apache shiro、mysql 框架搭建,基于maven构建

    Apache Shiro是一款轻量级的安全框架,用于处理身份认证、授权、会话管理和加密。在Spring MVC应用中,Shiro可以轻松地集成,提供用户登录、权限控制等功能。例如,它可以验证用户凭证,确保只有授权的用户才能访问...

    Apache Shiro 身份认证例子- Web应用

    可直接拷贝到Tomcat下运行,默认用户名/口令:admin/admin

    使用Apache Shiro保护你的WEB应用

    Apache Shiro是一个强大的Java安全框架,致力于简化身份验证和授权的过程。相较于JAAS(Java Authentication and Authorization Service)和Spring Security,Shiro在提供相同的安全功能的同时,更注重易用性和灵活...

    Apache shiro权限控制基础配置代码

    Apache Shiro是一款强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等核心功能。在本文中,我们将深入探讨Apache Shiro的基础配置和代码实现,以帮助你理解如何有效地使用Shiro进行权限控制...

    Apache_Shiro参考手册中文版.zip

    Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。 Apache Shiro 的首要目标是易于使用和理解。安全有时候是很复杂的,甚至是痛苦的,但它没有必要这样。框架应 ...

    整合Apache Oltu 与 Shiro. 提供一个轻量的OAUTH2应用框架

    Apache Oltu和Apache Shiro都是在IT领域中广泛使用的开源项目,它们分别专注于身份验证、授权和OAuth2协议的实现。将这两个组件整合在一起,可以构建出一个强大的、轻量级的安全应用框架,适用于各种应用场景,包括...

Global site tag (gtag.js) - Google Analytics