本文介绍了如何在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是一个强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等功能。这个教程将帮助你深入理解和有效地使用Shiro框架。在本文中,我们将详细探讨Shiro的核心概念、主要功能和常见用法...
首先,Shiro 的核心组件包括身份认证(Authentication)、授权(Authorization)和会话管理(Session Management)。身份认证是指验证用户的身份,通常涉及用户名和密码的校验;授权则是确定用户是否有权限执行特定...
Apache Shiro 是一款功能强大且易于使用的 Java 安全框架,它提供了多种安全相关的功能和服务,包括但不限于认证、授权、加密和会话管理。相较于其他安全框架,Shiro 在设计上更为简洁明了,便于开发者的理解和使用...
Apache Shiro 是一个强大且易用的 Java 安全框架,它提供了身份认证、授权、加密和会话管理功能,让开发人员可以轻松地在应用中处理安全性问题。本资源包含了一个 Apache Shiro 的身份认证例子的源码,这对于理解和...
Apache Shiro是一个全面的Java安全框架,用于处理应用程序的安全需求,包括身份验证、授权、密码管理和会话管理。它的核心功能之一是“RememberMe”服务,该服务允许用户在关闭浏览器后仍然保持登录状态,无需在下次...
Shiro 是一个 Apache Incubator 项目,旨在简化身份验证和授权。在本文中,了解 Apache Shiro 并通过示例来在一个 Groovy web 应用程序中尝试使用 Shiro 进行身份验证和授权
### Apache Shiro 使用手册知识点详解 #### 一、Apache Shiro 概述 **1.1 什么是 Apache Shiro** Apache Shiro 是一款强大的 Java 安全框架,它集成了认证、授权、加密和会话管理等功能。这些功能使得 Shiro 成为...
- **定义**:Apache Shiro 是一款强大且灵活的开源安全框架,它致力于简化应用程序的安全性问题,包括身份验证(Authentication)、授权(Authorization)、会话管理(Session Management)以及加密(Cryptography)...
Apache Shiro是一个强大且易用的Java安全框架,它提供了身份验证、授权、加密和会话管理等功能。本文将深入探讨如何使用Apache Shiro管理用户权限,并与数据库进行交互,以便实现动态、灵活的安全策略。 ### 一、...
直接使用java -jar srping....war命令运行即可 执行之后,访问http://主机的IP:8888/admin/*或者http://主机的IP:8888/login
1. **认证**:Shiro 提供了用户身份验证的能力,即验证用户是否为他们声称的身份。这包括用户名和密码的验证,可以通过自定义 Realm 实现与数据库或其他数据源的交互。例如,在 `spring_security.sql` 文件中可能...
1. **认证(Authentication)**:验证用户的身份,通常涉及用户登录过程。 2. **授权(Authorization)**:实施访问控制,确保用户只能访问他们被授权的资源。 3. **密码加密(Cryptography)**:通过加密技术保护...
Apache Shiro 是一个强大且易用的Java安全框架,提供了认证、授权、加密和会话管理功能,可以非常轻松地开发出足够安全的应用。Shiro 不仅可以用于Java Web 应用,也可以用于独立的Java应用。在集成Spring时,Shiro ...
Apache Shiro 身份验证绕过漏洞安全风险通告
Apache Shiro是一款轻量级的安全框架,用于处理身份认证、授权、会话管理和加密。在Spring MVC应用中,Shiro可以轻松地集成,提供用户登录、权限控制等功能。例如,它可以验证用户凭证,确保只有授权的用户才能访问...
可直接拷贝到Tomcat下运行,默认用户名/口令:admin/admin
Apache Shiro是一个强大的Java安全框架,致力于简化身份验证和授权的过程。相较于JAAS(Java Authentication and Authorization Service)和Spring Security,Shiro在提供相同的安全功能的同时,更注重易用性和灵活...
Apache Shiro是一款强大的Java安全框架,它为应用程序提供了身份验证、授权、会话管理和加密等核心功能。在本文中,我们将深入探讨Apache Shiro的基础配置和代码实现,以帮助你理解如何有效地使用Shiro进行权限控制...
Apache Shiro 是一个强大而灵活的开源安全框架,它干净利落地处理身份认证,授权,企业会话管理和加密。 Apache Shiro 的首要目标是易于使用和理解。安全有时候是很复杂的,甚至是痛苦的,但它没有必要这样。框架应 ...
Apache Oltu和Apache Shiro都是在IT领域中广泛使用的开源项目,它们分别专注于身份验证、授权和OAuth2协议的实现。将这两个组件整合在一起,可以构建出一个强大的、轻量级的安全应用框架,适用于各种应用场景,包括...