当前位置: 技术文章>> Shiro的与Spring MVC集成

文章标题:Shiro的与Spring MVC集成
  • 文章分类: 后端
  • 6817 阅读
文章标签: java java高级
### Shiro与Spring MVC集成详解 在Java Web开发领域,Shiro和Spring MVC是两个非常流行的框架。Shiro作为一个强大的Java安全框架,专注于身份验证、授权、密码学和会话管理,而Spring MVC则提供了灵活的模型-视图-控制器(MVC)架构,用于构建Web应用程序。将Shiro与Spring MVC集成,可以使得Web应用的安全性管理更加高效和便捷。接下来,我们将详细探讨Shiro与Spring MVC的集成过程,包括环境搭建、配置步骤及示例代码。 #### 一、环境搭建 首先,需要创建一个Maven-based的Web项目,并引入Shiro和Spring MVC的相关依赖。在`pom.xml`中添加以下依赖项: ```xml org.apache.shiro shiro-core 1.4.0 org.apache.shiro shiro-spring 1.4.0 org.springframework spring-webmvc 5.2.10.RELEASE javax.servlet javax.servlet-api 4.0.1 provided org.slf4j slf4j-log4j12 1.7.30 ``` #### 二、配置web.xml 在`web.xml`中配置Shiro的Filter以及Spring的监听器和DispatcherServlet。 ```xml org.springframework.web.context.ContextLoaderListener shiroFilter org.springframework.web.filter.DelegatingFilterProxy targetFilterLifecycle true shiroFilter /* springMvc org.springframework.web.servlet.DispatcherServlet contextConfigLocation /WEB-INF/spring-servlet.xml 1 springMvc / ``` #### 三、配置Spring和Shiro ##### 1. 配置Spring 在`src/main/resources`目录下创建`applicationContext.xml`和`spring-shiro-web.xml`配置文件。`applicationContext.xml`用于全局Spring Bean的配置,而`spring-shiro-web.xml`则专门用于Shiro的配置。 **applicationContext.xml** ```xml ``` **spring-shiro-web.xml** ```xml /login.jsp = anon /logout = logout /** = authc ``` ##### 2. 配置Spring MVC 在`WEB-INF`目录下创建`spring-servlet.xml`,配置Spring MVC的相关Bean和视图解析器。 ```xml ``` #### 四、实现自定义Realm 自定义Realm是Shiro认证和授权的核心部分。通过继承`AuthorizingRealm`并实现其`doGetAuthenticationInfo`和`doGetAuthorizationInfo`方法,可以实现自定义的认证和授权逻辑。 ```java package com.example.shiro; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationInfo; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.authc.SimpleAuthenticationInfo; import org.apache.shiro.authz.AuthorizationInfo; import org.apache.shiro.authz.SimpleAuthorizationInfo; import org.apache.shiro.realm.AuthorizingRealm; import org.apache.shiro.subject.PrincipalCollection; public class UserRealm extends AuthorizingRealm { @Override protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken token) throws AuthenticationException { // 假设token中的用户名是username String username = (String) token.getPrincipal(); // 这里应该是查询数据库等数据源获取用户信息 // 示例中直接使用用户名作为密码(实际中应使用密码加密比对) return new SimpleAuthenticationInfo(username, username, getName()); } @Override protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) { String username = (String) principals.getPrimaryPrincipal(); // 根据用户名查询用户权限 // 示例中简单分配权限 SimpleAuthorizationInfo info = new SimpleAuthorizationInfo(); if ("admin".equals(username)) { info.addRole("admin"); info.addStringPermission("user:view", "user:edit", "menu:view"); } else { info.addRole("user"); info.addStringPermission("user:view"); } return info; } } ``` #### 五、创建登录和首页 在`WEB-INF/jsp`目录下创建`login.jsp`和`main.jsp`,用于登录和首页显示。 **login.jsp** ```jsp <%@ page contentType="text/html;charset=UTF-8" language="java" %> Login
Username:
Password:
``` **main.jsp** ```jsp <%@ page contentType="text/html;charset
推荐文章