SSH框架下访问控制设计方案

转载请注明出处:jiq?钦‘s
technical Blog

在SSH框架之下,最基本的是要实现访问控制。

主要思想就是使用拦截器控制action的访问,使用jsp代码控制jsp页面的访问。

拦截器需要指定拦截除了LoginAction和LogoutAction之外的所有Action

一般是声明一些拦截器拦截器,然后将某些拦截器组合成拦截器栈:

<!-- 定义拦截器,在用户访问受保护资源之前判断其是否登录 -->

<interceptors>

<!-- 拦截器 -->

<interceptor
name="authen"
class="com.jsjl.interceptor.LoginAuthenInterceptor"/>

<!-- 定义一个拦截器栈 -->

<interceptor-stack
name="securityStack">

<interceptor-ref
name="defaultStack"/>

<interceptor-ref
name="authen"/>

</interceptor-stack>

</interceptors>

然后在Action配置中制定需要使用的拦截器:

<action
name="yndwAction"class="YNDWAction">

<result
name="success">yndw_1.jsp</result>

<result
name="error">error.jsp</result>

<interceptor-refname=”securityStack” />

</action>

但是不可能在所有的Action配置中都加上

<interceptor-ref name=”securityStack” />

解决方案:

1 Action访问控制

新建1+1+n个包

第一个包声明登入登出等不需要拦截的Action:

<package
name="login"extends="struts-default"
namespace="/">

<!-- class属性对应IoC容器中的BeanId,因为struts将Action托管给Spring了
-->

<action
name="login"
class="LoginAction">

<result
name="yndw"type="redirectAction">

<param
name="actionName">yndwAction</param>

<param
name="namespace">/</param>

</result>

<!—因为使用了struts2的框架验证,所以必须配置input接过类型,验证失效时候

返回input结果,若找不到input类型,就会尝试用action的class去创建一个

action,导致action未知类型的错误 -->

<result
name="input">/login.jsp</result>

</action>

<action
name="logoutAction"
class="LogoutAction">

<result
name="success">login.jsp</result>

</action>

</package>

第二个包声明拦截器,然后定义为默认拦截器:

<package
name="interceptor"extends="struts-default"
namespace="/">

<!-- 定义拦截器,在用户访问受保护资源之前判断其是否登录 -->

<interceptors>

<!-- 拦截器 -->

<interceptor
name="authen" class="com.jsjl.interceptor.LoginAuthenInterceptor"
/>

<!-- 定义一个拦截器栈 -->

<interceptor-stack
name="securityStack">

<interceptor-ref
name="defaultStack"
/>

<interceptor-ref
name="authen"
/>

</interceptor-stack>

</interceptors>

<!-- 在这个包中声明一个默认的拦截器对于action资源直接访问,使用拦截器,对于页面直接访问,页面中判断-->

<default-interceptor-ref
name="securityStack"/>

<!-- 如果一个结果在多个Action或者拦截器中使用,就应该将其配置为全局结果,注意类型为redirect -->

<global-results>

<result
name="login"type="redirect">/login.jsp</result>

</global-results>

</package>

然后其他N和包,都继承自第二个包,这样就默认继承了第二个包的默认的拦截器:

<package
name="XXX"extends="interceptor"
namespace="/">

就这样,访问除了第一个包中的所有Action都会通过拦截器判断用户是否登入,否则转到登陆页面。

拦截器是这样的:

public class LoginAuthenInterceptor extends AbstractInterceptor
{

public String intercept(ActionInvocation invocation) throws Exception
{

ActionContext context = ActionContext.getContext();

Map session = context.getSession();

Object user = session.get("isLogin");

if(user == null){

return"login";

}

return invocation.invoke();

}

}

2 JSP访问控制

然后对于jsp页面的访问控制,只需要在页面开始加上以下几句即可:

<%

Object isLogin = session.getAttribute("isLogin");

if(isLogin ==
null){

response.sendRedirect("login.jsp");

}

%>

时间: 2024-09-27 04:35:57

SSH框架下访问控制设计方案的相关文章

java ssh 框架下 利用junit4 spring-test进行单元测试

ssh框架下  由于bean实列 都交给spring 管理,要做单元测试就比较苦难,junit4 引入注解方便很多: 1. 加入依赖包 使用Spring的测试框架需要加入以下依赖包: JUnit 4 (官方下载:http://www.junit.org/) Spring Test (Spring框架中的test包) Spring 相关其他依赖包(不再赘述了,就是context等包) 2. 创建测试源目录和包 在此,推荐创建一个和src平级的源文件目录,因为src内的类都是为日后产品准备的,而此处

SSH框架下的表单重复提交

前几天做了一个功能,是在某个操作后,刷新父页面的,刷新时弹出了下面图的框: 网上查了之后发现这个框是表单重复提交时出现的.分析后发现,这个页面的上一个动作是form submit(在ssh框架下),这时frame.location值是提交表单时的action和method,此时做frame.location.reload(),就又一次做了提交表单的动作.这就是问题的症结.上图中的框是浏览器自己发现表单重复提交而出现的. 这个时候想刷新页面,就要换一个不是提交表单的location值了,问题因此得

Java之基于Eclipse搭建SSH框架(下)

在上篇博客里,我简介了Tomcat滴配置与Struts2滴搭建,假设对这个还不会滴童鞋去看一下我滴上篇博客<Java之基于Eclipse搭建SSH框架(上)>.今天我们接着上篇博客滴内容.继续搭建我们滴SSH框架. (一)在上篇博客滴基础上整合Spring: 首先我们把Spring所须要的jar(上篇博客有),拷贝到WebContent下的WEB-INF下的lib里面. 其次在src下创建名为:applicationContext.xml文件.(有些人提示在WEB-INF下创建)个人建议:在s

懒人专用SSH框架下的基本配置

项目结束,马上就要出去找工作了,这段时间也不用写项目,就整理了一些以后可能会用的到的配置,还有一个原因就是我不想去记忆......... SSH下application.xml的基本配置,应该满足一般的开发需求 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans"     xmlns:xs

SSH框架下ajax调用action并生成JSON再传递到客户端【以get和post方式提交】

需要完成的任务: 主要是把JSP页面上图片ID传给服务器端,服务器读取cookie看是否有username,如果有则根据ID读取MongoDB数据库,读出图片URL,再存放到mysql中的collection数据库中,实现了收藏功能. 第一步:就是使用ajax实现前后台的交互. jsp页面代码: <a id="1" class="bsc" onclick="collect(this.id)"></a> js代码: <

基于SSH框架的学生公寓管理系统的质量属性

系统名称:学生公寓管理系统 首先介绍一下学生公寓管理系统,在学生公寓管理方面,针对学生有关住宿信息问题进行管理,学生公寓管理系统主要包含了1)学生信息记录:包括学号.姓名.性别.院系.班级:2)住宿信息记录:包括宿舍楼号.宿舍号.电费信息.维修记录:3)报修信息记录:包括宿舍楼号.宿舍号.报修品.时间.维修状态:4)后勤人员记录:包括工号.姓名.联系方式:5)电费信息记录:包括宿舍楼号.宿舍号.电剩余量.使用量.缴费金额.剩余金额:6)学生晚归记录:晚归学生的学号.姓名.时间.宿舍号.日期.和原

SSH框架系列:Spring读取配置文件以及获取Spring注入的Bean

分类: [java]2013-12-09 16:29 1020人阅读 评论(0) 收藏 举报 1.简介 在SSH框架下,假设我们将配置文件放在项目的src/datasource.properties路径下,Spring的配置文件也是src/applicationContext.xml路径下,那么我们可以借助Spring的property-placeholder读取配置文件,然后注入Bean中.我们在程序中,可以根据Bean的Id,获取注入的值.这样我们就可以借助Spring来读取配置文件. 2.

javaEE SSH框架 qq第三方登录及用户绑定(java sdk版)

之前有位朋友用js sdk实现了 SSH框架下的qq第三方登录功能,但是我发现使用js sdk 有些无法克服的安全问题,所以我改用java sdk来实现这个功能! 如图,使用java sdk时,回调地址应设置为一个.action链接.(注意!修改回调地址的话,官方不会及时给你审核通过,有的人修改回调地址后一年 官方都没给他审核通过,这意味着[修改回调地址不如 要重新申请一个域名!重新申请一次网站接入]) 使用官方给定的Sdk4J.jar时 控制台会打印许多log信息,这严重影响项目的运行效率,所

Eclipse下面的Maven管理的SSH框架整合(Struts,Spring,Hibernate)

搭建的环境:eclispe下面的maven web项目 Struts:    2.5.10 Spring:    4.3.8 Hibernate:   5.1.7 .Final MySQL:   5.1.30 先来详细的讲解一下SSH框架的整合,在这里是将struts2.0的Action的创建工作由Spring进行统一管理,主要是利用了Spring 控制反转和依赖注入的功能. 而将hibernate.cfg.xml整合Spring的配置文件中.而且利用Spring的面向切向功能对Hibernat