struts2 Spring4 hiberante4 shiro2集成实例

Shiro整合SSH开发2:结合Struts2实现登陆和退出以及Shiro执行流程和原理解析 登陆原理如下: 当用户没有认证时,请求loginurl进行认证【在applicationContext-shiro.xml 配置中】,用户身份和用户密码提交数据到loginurl 从表单提交认证的request中被FormAuthenticationFilter拦截住,取出request中的username和password【这两个参数的名称是可以配置的】。 FormAuthentication 阅读详情

技术:struts2,spring4,hibernate4,shiro2,h2database,jetty,easyui 1.36

功能:用户的CRUD,登陆,页面与后台权限验证,

使用maven 构建项目,下载代码后,运行start.bat或mvn jetty:run 一键启动项目。

 

 

 

 

 

1、UserLoginActioin.java

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1. package com.jst.myjstBase.web;  
  2.   
  3. public class UserLoginAction extends BaseAction<User> {  
  4.     /** 
  5.      *  
  6.      */  
  7.     private static final long serialVersionUID = 1L;  
  8.     private Log log = LogFactory.getLog(UserLoginAction.class);  
  9.     private User user;  
  10.     private String verifyCode;  
  11.       
  12.     public User getUser() {  
  13.         return user;  
  14.     }  
  15.   
  16.     public void setUser(User user) {  
  17.         this.user = user;  
  18.     }  
  19.   
  20.     public String getVerifyCode() {  
  21.         return verifyCode;  
  22.     }  
  23.   
  24.     public void setVerifyCode(String verifyCode) {  
  25.         this.verifyCode = verifyCode;  
  26.     }  
  27.   
  28.     public String login() throws Exception {  
  29.         // SecurityUtils.getSubject().login(new  
  30.         // UsernamePasswordToken(user.getUserCode(), user.getPassword()));  
  31.         try {  
  32.             if (request.getSession() != null && request.getSession().getAttribute("USERNAME") != null) {  
  33.                 return SUCCESS;  
  34.             }  
  35.             HttpSession session = request.getSession();  
  36.   
  37.             // 判断验证码  
  38.             if (verifyCode == null || !verifyCode.equals((String) session.getAttribute("verifyCode"))) {  
  39.                 addActionMessage("验证码错误");  
  40.                 log.debug("验证码错误");  
  41.                 return LOGIN;  
  42.             }  
  43.             // 清除验证码  
  44.             session.removeAttribute("verifyCode");  
  45.             // 判断用户名密码  
  46.             UsernamePasswordToken token = new UsernamePasswordToken(user.getUserCode(), user.getPassword());  
  47.             // UsernamePasswordToken token = new UsernamePasswordToken(  
  48.             // user.getUserCode(),EncryptUtils.encryptMD5(user.getPassword()));  
  49.             // token.setRememberMe(true);  
  50.             try {  
  51.                 currentUser.login(token);  
  52.                 session.setAttribute("USERNAME", "admin");  
  53.             } catch (AuthenticationException e) {  
  54.                 log.error(e, e);  
  55.                 addActionMessage("用户名或密码错误");  
  56.                 return LOGIN;  
  57.             }  
  58.             return SUCCESS;  
  59.         } catch (Exception e) {  
  60.             log.error(e, e);  
  61.         }  
  62.         return LOGIN;  
  63.     }  
  64.   
  65. }<strong>  
  66. </strong>  


2、ShiroDbRealm.java

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1. package com.jst.common.service.impl;  
  2. public class ShiroDbRealm extends AuthorizingRealm {  
  3.     protected IUserService userService;  
  4.   
  5.     /** 
  6.      * 认证回调函数,登录时调用. 
  7.      */  
  8.     @Override  
  9.     protected AuthenticationInfo doGetAuthenticationInfo(AuthenticationToken authcToken) throws AuthenticationException {  
  10.         UsernamePasswordToken token = (UsernamePasswordToken) authcToken;  
  11.         User user = userService.findUserByLoginName(token.getUsername());  
  12.   
  13.         if (user != null) {  
  14.             byte[] salt = Encodes.decodeHex(user.getSalt());  
  15.             return new SimpleAuthenticationInfo(new ShiroUser(user.getId(), user.getUserCode(), user.getUserName()),  
  16.                     user.getPassword(), ByteSource.Util.bytes(salt), getName());  
  17.         }  
  18.         return null;  
  19.     }  
  20.   
  21.     /** 
  22.      * 授权查询回调函数, 进行鉴权但缓存中无用户的授权信息时调用. 
  23.      */  
  24.     @Override  
  25.     protected AuthorizationInfo doGetAuthorizationInfo(PrincipalCollection principals) {  
  26.         ShiroUser shiroUser = (ShiroUser) principals.getPrimaryPrincipal();  
  27. //      User user = userService.findUserByLoginName(shiroUser.loginName);  
  28.         SimpleAuthorizationInfo info = new SimpleAuthorizationInfo();  
  29.         info.addRole("user");  
  30.         if(shiroUser.loginName.equals("admin")){  
  31.             info.addStringPermission("user:add");  
  32.             info.addStringPermission("user:edit");  
  33.             info.addStringPermission("user:update");  
  34.             info.addStringPermission("user:delete");  
  35.             info.addStringPermission("user:query");  
  36.         }else{  
  37.             info.addStringPermission("user:query");  
  38.         }  
  39.         // info.addRoles(user.getRoleList());  
  40.         return info;  
  41.     }  
  42. }  

3、applicationContext-shiro.xml

 

 

[html] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
  3.     xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.1.xsd"  
  4.     default-lazy-init="true">  
  5.   
  6.     <description>Shiro安全配置</description>  
  7.   
  8.     <!-- Shiro's main business-tier object for web-enabled applications -->  
  9.     <bean id="securityManager" class="org.apache.shiro.web.mgt.DefaultWebSecurityManager">  
  10.         <property name="realm" ref="shiroDbRealm" />  
  11.         <property name="cacheManager" ref="shiroEhcacheManager" />  
  12.     </bean>  
  13.   
  14.     <!-- 項目自定义的Realm-->  
  15.     <bean id="shiroDbRealm" class="com.jst.common.service.impl.ShiroDbRealm">  
  16.         <property name="userService" ref="userServiceImpl"/>  
  17.     </bean>  
  18.       
  19.     <!-- Shiro Filter -->  
  20.     <bean id="shiroFilter" class="org.apache.shiro.spring.web.ShiroFilterFactoryBean">  
  21.         <property name="securityManager" ref="securityManager" />  
  22.         <property name="loginUrl" value="/login.jsp" />  
  23.         <!-- <property name="successUrl" value="/" /> -->  
  24.         <property name="unauthorizedUrl" value="/error/noperms.jsp" />  
  25.         <property name="filterChainDefinitions">  
  26.             <value>  
  27.                 /logout = logout  
  28.                 /Images/** = anon  
  29.                 /system/verifyCode.action* = anon  
  30.                 /system/userLogin_login.action* = anon  
  31.                 /error/** = anon  
  32.                 /Json/** = anon  
  33.                 /Css/** = anon  
  34.                 /Js/** = anon  
  35.                 /admin/** = roles[admin]  
  36.                 /** = authc  
  37.             </value>  
  38.         </property>  
  39.     </bean>  
  40.       
  41.     <!-- 用户授权信息Cache, 采用EhCache -->  
  42.     <bean id="shiroEhcacheManager" class="org.apache.shiro.cache.ehcache.EhCacheManager">  
  43.         <property name="cacheManagerConfigFile" value="classpath:ehcache/ehcache-shiro.xml"/>  
  44.     </bean>  
  45.       
  46.     <!-- 保证实现了Shiro内部lifecycle函数的bean执行 -->  
  47.     <!-- <bean id="lifecycleBeanPostProcessor" class="org.apache.shiro.spring.LifecycleBeanPostProcessor"/> -->  
  48. </beans>  


4、UserList.jsp页面权限控制代码

 

 

[php] view plaincopy在CODE上查看代码片派生到我的代码片

  1. <div style="padding: 5px; height: auto">  
  2.    <shiro:hasPermission name="user:edit">  
  3. <span style="white-space:pre">    </span><a id="edit" href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-edit" plain="true">编辑</a>  
  4.    </shiro:hasPermission>  
  5.    <shiro:hasPermission name="user:delete">  
  6. <span style="white-space:pre">    </span><a id="delete" href="javascript:void(0)" class="easyui-linkbutton" iconCls="icon-remove" plain="true">删除</a>  
  7.    </shiro:hasPermission>  
  8. </div>   


5、BaseAction.java权限控制

 

 

[java] view plaincopy在CODE上查看代码片派生到我的代码片

  1. package com.jst.common.web;  
  2.   
  3.   
  4. public abstract class BaseAction<T> extends ActionSupport implements ServletRequestAware, ServletResponseAware {  
  5.     private final Log log = LogFactory.getLog(BaseAction.class);  
  6.   
  7.   
  8.     public abstract String getPremissionModelCode();  
  9.   
  10.     protected Subject currentUser;  
  11.   
  12.     // public abstract IBaseService<T> getBaseService();  
  13.     protected void setPages(Page<T> tmppage) {  
  14.         tmppage.setPageNo(page);  
  15.         tmppage.setPageSize(rows);  
  16.         tmppage.setOrder(order);  
  17.         tmppage.setOrderBy(sort);  
  18.     }  
  19.   
  20.     public BaseAction() {  
  21.         ParameterizedType pt = (ParameterizedType) this.getClass().getGenericSuperclass();  
  22.         modelClass = (Class) pt.getActualTypeArguments()[0];  
  23.         currentUser = SecurityUtils.getSubject();  
  24.     }  
  25.   
  26.     /** 
  27.      * 继承BaseAction的action需要先设置这个方法,使其获得当前action的业务服务 
  28.      *  
  29.      * @param service 
  30.      */  
  31.     public void setService(IBaseService<T> baseService) {  
  32.         this.service = baseService;  
  33.     }  
  34.   
  35.     public String toAdd() throws Exception {  
  36.         if (currentUser.isPermitted(getPremissionModelCode() + ":add")) {  
  37.             return ADD;  
  38.         }  
  39.         WriterUtil.writerJson(response, "无权访问"+getPremissionModelCode() + ":add");  
  40.         return null;  
  41.     }  

 

7、登陆成功并返回index.jsp

源码:http://blog.youkuaiyun.com/javaee_ssh/article/details/42834949

Shiro整合SSH开发1:整合Shiro+Struts2+Spring+Hibernate 初步整合配置【基于Maven】 我看的视频教程中使用的是SSM(Spring+SpringMVC+mybaties),但是我目前用的是SSH,特别是Struts2,在学习的时候特别不方便,后面在网络上面查找对应的文章,写的东西都不够详尽。因此我自己根据视频教程中的配置流程一步步转化为关于SSH的配置。(虽然初步配置完成后发现和Controller层的关系不大,但是写下这篇文章还是觉得挺有成就感的。) 这是一个基础的配置,直到基础配置完成为止,我并没有进行一个详细的认证和授权的流程,但是也希望通过这篇文章能帮助到大家。如果大家觉得 阅读详情

相关推荐

shiro、struts2、weblogic特征流量分析

shiro、struts2、weblogic特征流量分析

2302_81945070的博客 1425

基于struts2、hibernate、spring、shiro、MySQL的项目开发

使用maven管理jar包的依赖 < project xmlns = “ http://maven.apache.org/POM/4.0.0 ” xmlns :xsi = “ http://www.w3.org/2001/XMLSchema-instance ” xsi :schemaLocation = “ http:/ /maven.apache.org/POM/4.0....

weixin_30772105的博客 158

shiro和struts2的简单整合

shiro和struts2的简单整合的项目 包含,用户登录,shiro关联的tag标签的简单使用,

struts2与shiro集成(实例)

:D 近日,看到了,我心中 “框架之神” 江南白衣的springside4,颇有感触。也发现了一个很好玩,很实用,很简单的权限控制框架shiro。运行了springside4,发先用的是 springmvc。但是对于shiro集成struts2的资料咋这么难找啊。哭了都。例子在附件中,下载即可运行。没有用 maven。 集成的时候说明几点: [code="java"] 1、jar包不能...

fq17981314的博客 713

struts2和shiro完美整合解决方案

struts2和shiro整合的解决方案很少,别的资源你别下载了,我试过了都是不好用的,这个是绝对好用的。带登陆和退出,还有角色的配置和使用。

struts2shiro(by annotation)

1、shiro+strut2 2、shiro注解 + struts2注解 2、shiro 缓存:因为使用了缓存,第一使用admin登录,如果没有logout,再用test登录,则test具有admin的权限

Spring 2集成Struts 2(四)

 表单页面和成功页面用于填写用户注册信息的表单页面需要使用Struts 2的标签,这样就可以和服务端的Action属性进行绑定。来看一下registerUser.jsp页面的代码:<!--Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com

xiaolang85的专栏 695

Shiro与SSH集成的一个综合的例子

最近通过http://jinnianshilongnian.iteye.com/blog/2018398学习了一下shiro,感觉shiro确实不错,但是学习的时候,作者使用的是springMVC,而本人开始使用的是SSH,有些小失望,决心自己做一个Shiro和SSH集成的demo,供大家参考,由于本人工作时间紧,所以这个项目拖了将近一个月的时间,大体的权限管理已经实现了,只是部分修改和删除功能没有时间去写了,不过shiro的权限控制已经可以提现了,希望对大家有所帮助吧,尤其是使用SSH开发的人员。项目里面有完整的数据库文件

Struts Hibernate Spring SSH集成碰到的问题

 参考资料: 1,三种整合 Struts 应用程序与 Spring 的方式  http://www.ibm.com/developerworks/cn/java/j-sr2.html   SSH集成碰到的问题1. getHibernateTemplate() 方法返回 NULL 值

十一郎的IT博客 904

SSH整合(Spring+Shiro+Hibernate) - 你会喜欢的

给大家分享一个前几年闲着蛋疼写(应该叫整合吧)的一个WEB应用框架,整合了Spring,使用的是SpringMVC,而不是Struts,Java开源框架Shiro,持久层框架Hibernate。实现的主要功能有,用户的管理,角色管理,可配置的Lookup(翻译成参照?)功能,可配置的select多选项,记录列表分页,增、删、查、改。多文件上传功能以及KindEditor所见即所得编辑器。 关于如何运行请看详细说明文档: http://www.cxy808.com/cxy/20140502/806.html

【首份】2023年30米分辨率土地利用遥感监测数据

为了恢复和重建我国土地利用变化的现代过程,更好地预测、预报土地利用变化趋势,地球资源数据云以美国陆地卫星Landsat 遥感影像数据作为主信息源,结合Sentinel系列数据,通过人工目视解译和机器学习方法,建立了国家尺度1:10 万比例尺多时期土地利用/土地覆盖遥感监测数据库(CNLUCC)因早期Landsat数据时空覆盖缺失,1972-1977年合成第一期数据,1978-1985年合成第二期数据,1986年起每年度生成一期数据。投影:Albers正轴等面积双标准纬线圆锥投影南标准纬线:25°N。

地球资源数据云的官方博客 3669

记录一次struts2转spring MVC的经历

应公司要求,需要对原有SSH(struts2+hibernate3+spring3)框架进行升级,升级后框架为springMVC4+spring4+hibernate4+spring session+shiro,下面简单介绍下升级过程。1、修改pom.xml,这步不多说,按照需要配置对应版本即可,途中会遇到各种各样版本冲突问题,没办法,慢慢改吧,修改后的版本如下:2、修改web.xml    1)...

纳米的专栏 7085

SUMO仿真教程(5) —— 使用“XML“语言自定义构建路网

文章目录一.简要介绍1.node file2.edge file3.lane definitions(1)路段细分(2)邻近的对向车道(3)删除边或车道4.type file(1)简要概述(2)edge定义中引用type文件的示例(3)指定车辆种类的速度限制5.connections file(1)简要概述:(2)connection的属性参数(3)删除连接(4)设置连接的优先级(5)同一边的多个连接二.演示示例:1.自定义编写node file2.自定义编写edge file3.自定义编写type fil

weixin_50632459的博客 5015

shiro整合ssh

我们可以自定义一个,但spring整合shiro时提供了一个拦截器注解:可以加载相应方法上。没有权限的话会在前端报错,不合适,我们要在后台处理。使用注解就不需要再进行上面的自定义拦截器了。创建自定义的realm文件。...

weixin_43766390的博客 321

Android13配置selinux让system应用可读sys,proc,SN号

Android13预置的system应用,需要读/sys, /proc目录,读(SN)serial number号, 需要修改selinux配置,否则会报avc错.其修改方法会比Android11复杂一些.。

zmlovelx(帅得不敢出门 程序员群31843264) 2654

控制科学与工程(自动化)保研经验【4】——浙大篇

控制科学与工程(自动化)保研经验【4】——浙大篇

Control Everything 1万+

SSH整合shiro

和大家分享一下 ssh整合shiro 关于ssh的整合就不啰嗦了,我上篇文章有详细的说明,关于整合shiro,首先在ssh整合的基础上进行组合 1.首先,要导入几个依赖(整合ssh与shiro的依赖):         1.3.2   //整合shiro的版本     //上面的一些有关于整合ssh的依赖就不详细说了    org.apache.sh

desert568的博客 2729

vue3 - 高德地图定位出错Get ipLocation failed.Geolocation permission denied.(info: “FAILED“ | status: 0)报错解决!

vue3,nuxt3,高德地图,定位,位置,报错,AMap.Geolocation,解决报当前定位失败,高德地图H5 定位失败报错,web网页网站,报错详细解决教程,Get ipLocation failed.Geolocation permission denied.,高德地图定位报错info: "FAILED",高德地图status: 0,已经是https了还是报错,确保了浏览器位置已经开了,手机定位也开了,没解决,H5页面在ios的浏览器上使用 高德地图 报当前定位失败Geolocation,移动端设

✅ 精选推荐文章 6771

一、Shiro+Spring+Struts2集成演示权限控制Demo示例

更好的理解shiro安全框架的好demo,不容错过~~

欲望以提升热忱 毅力以磨平高山 9005

STM32CubeMX | 38-使用硬件SPI驱动以太网模块(W5500)

本篇详细的记录了如何使用STM32CubeMX配置STM32L431RCT6的硬件SPI外设与以W5500通信,驱动以太网模块。 1. 准备工作 硬件准备 开发板 首先需要准备一个开发板,这里我准备的是STM32L4的开发板(BearPi): W5500以太网模块 这里我使用常见的以太网模块W5500: W5500官网 http://www.w5500.cn/ W5500中文手册 iEthernet W5500 Datasheet 软件准备 需要安装好Keil - MDK及芯片对应的包,以

Mculover666的博客(嵌入式) 7387

PyTorch实战(12)——图神经网络(Graph Neural Network,GNN)

在本节中,我们首先简要概述了图神经网络 (Graph Neural Network, GNN) 的核心概念与应用,GNN 通过构建计算图分层聚合节点特征,解决了传统神经网络处理图数据时的四大局限:信息深度不足、节点顺序敏感、动态扩展困难和特征稀疏性问题。了解了不同类型的图学习任务(包括节点级、边级和图级三大类)。接着我们研究了几种流行的 GNN 模型,包括:GCN (通过权重共享实现图卷积)、GAT (引入注意力机制区分邻居重要性)和 GraphSAGE (采用随机采样应对大规模图)。

盼小辉丶的博客 3625

SSH整合Shiro

SSH整合Shiro 环境配置:SSH框架,Shiro框架 一、搭建SSH框架,结构如下图: 二、导入几个依赖(整合ssh与shiro的依赖): &lt;!--引入shiro核心依赖shiro-core--&gt;          &lt;dependency&gt;                   &lt;groupId&gt;org.apache.shiro&lt;/g...

LYQ2332826438的博客 1085

BioEmu 扩散模型加速传统分子动力学(MD)模拟

BioEmu 是一种创新的生成式深度学习系统,通过高效采样和准确预测蛋白质的动态机制,为蛋白质科学和药物设计提供了新的工具。它在多构象采样、MD 模拟拟合和蛋白质稳定性预测方面表现出色,同时显著降低了计算成本。BioEmu 的开发为未来蛋白质动态研究和应用奠定了坚实基础。

weixin_42357472的博客 318

shiro 集成 springmvc 4 小记

按照网上的教程,砌了个 shiro和 springmvc 4 的框架,见 https://gitee.com/luobenyu/admin-console。主要是琢磨 shiro 登录时的自定义加密、解密流程。 这个集成考虑数据库表、验证流程的可定制性,故不采取jdbcRealm 的集成方式。查阅了一些非官方的教程,都会提到要覆盖org.apache.shiro.realm.Author...

u013948083的专栏 379

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

ssh项目整合shiro时,在struts2的action中使用shiro的注解进行权限控制时,NoSuchMethodException:com.sun.proxy.$Proxy26

ssh项目整合shiro时,在struts2的action中使用shiro的注解进行权限控制时,NoSuchMethodException:com.sun.proxy.$Proxy26 提示找不到

coolcao的coder点滴 4490

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

上一篇: Radhat 5 6 7 配置 yum
下一篇: Linux Maven 安装与配置
javaee_ssh
博客等级 码龄18年 42粉丝 42原创
评论 6
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值