高分求高手指教 如何防止用户在地址栏中直接输入action,进而登陆系统;例如:在地址栏直接输入http://localhost:8080/XXXX/login进而直接登陆系统。框架用的是S2+Spring+hibernate,高分求教~谢谢,需求详细代码。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 token啊 google下 你的登陆没有用户名、密码校验?我想你应该担心的不是这吧,你是怕用户跨过登陆页面直接查看页面吧。那你可以自定义个登陆拦截器,extends AbstractInterceptor。然后再struts.xml配置下即可。 如何使用struts2拦截器,或者自定义拦截器。特别注意,在使用拦截器的时候,在Action里面必须最后一定要引用struts2自带的拦截器缺省堆栈defaultStack,如下(这里我是引用了struts2自带的checkbox拦截器):<interceptor-ref name="checkbox"><param name="uncheckedValue">0</param></interceptor-ref><interceptor-ref name="defaultStack"/>(必须加,否则出错)也可以改为对全局Action设置自己需要的拦截器,如下:在struts.xml里面定义全局的配置设置 <package name="struts-shop" extends="struts-default"> <interceptors> <interceptor-stack name="myStack"> <interceptor-ref name="checkbox"> <param name="uncheckedValue">0</param> </interceptor-ref> <interceptor-ref name="defaultStack"/> </interceptor-stack> </interceptors> <default-interceptor-ref name="myStack"/>(这句是设置所有Action自动调用的拦截器堆栈)</package>struts-action.xml里面配置Action如下:<package name="LogonAdmin" extends="struts-shop">(这里扩展struts.xml里面定义的配置就可以了)<action name="logon" class="logonAction"> <result>/jsp/smeishop/admin/index.jsp</result> <result name="error">/jsp/smeishop/admin/logon.jsp</result> <result name="input">/jsp/smeishop/admin/logon.jsp</result> </action> <action name="logout" class="logoutAction"> <result>/jsp/smeishop/admin/logon.jsp</result> </action></package>你的拦截器可以正常工作了!!http://www.itzcn.com/video-vid-454-spid-20.html 视频链接 给你找了个以前用的,好多地方还得你自己改:拦截器:@SuppressWarnings("serial")public class LogonInterceptor extends AbstractInterceptor { private static Logger log = Logger.getLogger(LogonInterceptor.class); @SuppressWarnings("unchecked") public String intercept(ActionInvocation invocation) throws Exception { // 取得请求的Action名 String name = invocation.getInvocationContext().getName(); String methodname = invocation.getInvocationContext() .getActionInvocation().getProxy().getMethod(); if (name.equals("login")) { // 如果用户想登录,则使之通过 return invocation.invoke(); }else { // 取得Session ActionContext ac = invocation.getInvocationContext(); Map session = (Map) ac.get(ServletActionContext.SESSION); if (session == null) { // 如果Session为空,则让用户登陆。 return "login"; } else { Systemuser systemuser = (Systemuser) session.get("systemuser"); if (systemuser == null) { // Session不为空,但Session中没有用户信息, // 则让用户登陆 return "login"; } else { // 用户已经登陆,放行~ return invocation.invoke(); } } } }}struts.xml<package name="struts-interceptor" extends="json-default,struts-default"> <interceptors> <interceptor name="logon" class="org.huajun.utils.LogonInterceptor" /> <interceptor-stack name="checksession"> <interceptor-ref name="logon" /> <interceptor-ref name="defaultStack" /> </interceptor-stack> </interceptors> <default-interceptor-ref name="checksession" /> </package> 拦截器啊,struts2最核心,最好用的东西你都不用啊 一般我是通过过滤器解决的。例如这个action是已登录的用户才能访问,那么就可以在过滤器里写判断是否已登录,没有的话可以写转发代码转发到一个错误提示页面。给你个示例过滤类package com.game.manager.web;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpSession;/** * 过滤器,防止未登录用户访问操作页面 * @author chenqunaho * create date:2010-11-30 上午11:14:07 */public class MyFilter implements Filter { public void destroy() { // TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response, FilterChain filter) throws IOException, ServletException { //请求对象 HttpServletRequest req = (HttpServletRequest) request; //设置请求数据编码 request.setCharacterEncoding("gbk"); //会话对象 HttpSession session=req.getSession(); //判断用户是否已登陆 if(session.getAttribute("username")==null) { req.setAttribute("showInfo", "您未登陆,不能访问该页面!"); req.getRequestDispatcher("/WEB-INF/page/common/showInfo.jsp").forward(req, response); return; } //继续往下执行 filter.doFilter(request, response); } public void init(FilterConfig arg0) throws ServletException { // TODO Auto-generated method stub }}使用过滤器需要在web.xml中配置,主要该配置要写在struts的配置上面<!-- 配置过滤器 --> <filter> <filter-name>filter</filter-name> <filter-class>com.game.manager.web.MyFilter(过滤器的类路径)</filter-class> </filter> <filter-mapping> <filter-name>filter</filter-name> <url-pattern>/admin/*</url-pattern> </filter-mapping> JSTL显示对象中实例成员的成员属性 大家帮我分析一下 Struts2的标签库太麻烦了,有没有不用标签库实现StrutsMVC的技术 14个经典的Javascript代码 无法安装J2EE_SDK文件,不解 在访问网页时出现以下错误 望高手指点一下 为什么编译器提示xxx。java使用或者覆盖了过时API? Jbuilder 2006下怎样把lib下面的.jar包引 jboss和tomcat是什么关系 哪儿下载tomcat5 struts2中可以set一个静态类 然后后面直接调用吗? Spring datasource注入,如何查看当前连接数
我想你应该担心的不是这吧,你是怕用户跨过登陆页面直接查看页面吧。那你可以自定义个登陆拦截器,extends AbstractInterceptor。然后再struts.xml配置下即可。
<param name="uncheckedValue">0</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
(必须加,否则出错)也可以改为对全局Action设置自己需要的拦截器,如下:
在struts.xml里面定义全局的配置设置
<package name="struts-shop" extends="struts-default">
<interceptors>
<interceptor-stack name="myStack">
<interceptor-ref name="checkbox">
<param name="uncheckedValue">0</param>
</interceptor-ref>
<interceptor-ref name="defaultStack"/>
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="myStack"/>(这句是设置所有Action自动调用的拦截器堆栈)
</package>struts-action.xml里面配置Action如下:
<package name="LogonAdmin" extends="struts-shop">(这里扩展struts.xml里面定义的配置就可以了)
<action name="logon" class="logonAction">
<result>/jsp/smeishop/admin/index.jsp</result>
<result name="error">/jsp/smeishop/admin/logon.jsp</result>
<result name="input">/jsp/smeishop/admin/logon.jsp</result>
</action>
<action name="logout" class="logoutAction">
<result>/jsp/smeishop/admin/logon.jsp</result>
</action>
</package>你的拦截器可以正常工作了!!
http://www.itzcn.com/video-vid-454-spid-20.html 视频链接
public class LogonInterceptor extends AbstractInterceptor {
private static Logger log = Logger.getLogger(LogonInterceptor.class); @SuppressWarnings("unchecked")
public String intercept(ActionInvocation invocation) throws Exception {
// 取得请求的Action名
String name = invocation.getInvocationContext().getName();
String methodname = invocation.getInvocationContext()
.getActionInvocation().getProxy().getMethod();
if (name.equals("login")) {
// 如果用户想登录,则使之通过
return invocation.invoke();
}else {
// 取得Session
ActionContext ac = invocation.getInvocationContext();
Map session = (Map) ac.get(ServletActionContext.SESSION);
if (session == null) {
// 如果Session为空,则让用户登陆。
return "login";
} else {
Systemuser systemuser = (Systemuser) session.get("systemuser");
if (systemuser == null) {
// Session不为空,但Session中没有用户信息,
// 则让用户登陆
return "login"; } else {
// 用户已经登陆,放行~ return invocation.invoke(); }
}
}
}
}
struts.xml
<package name="struts-interceptor" extends="json-default,struts-default">
<interceptors>
<interceptor name="logon" class="org.huajun.utils.LogonInterceptor" />
<interceptor-stack name="checksession">
<interceptor-ref name="logon" />
<interceptor-ref name="defaultStack" />
</interceptor-stack>
</interceptors>
<default-interceptor-ref name="checksession" />
</package>
给你个示例
过滤类package com.game.manager.web;import java.io.IOException;import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
/**
* 过滤器,防止未登录用户访问操作页面
* @author chenqunaho
* create date:2010-11-30 上午11:14:07
*/
public class MyFilter implements Filter { public void destroy() {
// TODO Auto-generated method stub } public void doFilter(ServletRequest request, ServletResponse response,
FilterChain filter) throws IOException, ServletException {
//请求对象
HttpServletRequest req = (HttpServletRequest) request;
//设置请求数据编码
request.setCharacterEncoding("gbk");
//会话对象
HttpSession session=req.getSession();
//判断用户是否已登陆
if(session.getAttribute("username")==null)
{
req.setAttribute("showInfo", "您未登陆,不能访问该页面!");
req.getRequestDispatcher("/WEB-INF/page/common/showInfo.jsp").forward(req, response);
return;
}
//继续往下执行
filter.doFilter(request, response);
} public void init(FilterConfig arg0) throws ServletException {
// TODO Auto-generated method stub }}
使用过滤器需要在web.xml中配置,主要该配置要写在struts的配置上面<!-- 配置过滤器 -->
<filter>
<filter-name>filter</filter-name>
<filter-class>com.game.manager.web.MyFilter(过滤器的类路径)</filter-class>
</filter>
<filter-mapping>
<filter-name>filter</filter-name>
<url-pattern>/admin/*</url-pattern>
</filter-mapping>