spring security3.2 怎么加载菜单树

jsp页面代码如下:
&form name=&f& action=&${ctx}/j_spring_security_check& method=&post&
&&id=&inputForm&&
&&&input type=&hidden& name=&userType& value=&admin& /&
&&&div id=&login_default&&
&&&&h1&Administrative login&/h1&
&&&&div class=&login_zone&&
&&&&&c:if test=&${not empty param.error}&&
&&&&&&span style=&color:& id=&errorSpan&& Your login attempt
&&&&&&was not successful, try again.&br /&
&&&&&&br /& Reason: &c:out
&&&&&&&value=&${SPRING_SECURITY_LAST_EXCEPTION.message}& /&. &/span&
&&&&&/c:if&
&&&&&c:if test=&${empty param.error}&&
&&&&&&br /&
&&&&&/c:if&
&&&&&table width=&90%& border=&0& cellspacing=&2& cellpadding=&3&&
&&&&&&&td width=&39%&&Login:&/td&
&&&&&&&td width=&61%&&
&&&&&&&input type='text' maxlength=&50&
&&&&&&&class=&wd230 required email& name='j_username'
&&&&&&&value='&c:if test=&${not empty param.error}&&&c:out escapeXml = &false&& value=&${SPRING_SECURITY_LAST_USERNAME}& /&&/c:if&' /&
&&&&&&&/td&
&&&&&&/tr&
&&&&&&&td&Password:&/td&
&&&&&&&td&&input type='password' maxlength=&8&
&&&&&&&class=&wd230 required& name='j_password' /&
&&&&&&&/td&
&&&&&&/tr&
&&&&&&c:if test=&${not empty param.error}&&
&&&&&&&tr&
&&&&&&&&td&Access Code:&/td&
&&&&&&&&td&&input type='text' maxlength=&4& class=&required&
&&&&&&&&name='j_code' id=&j_code& size=&16& /&&img
&&&&&&&&src=&${ctx}/captcha-image.img& id=&kaptchaImage& /&
&&&&&&&&/td&
&&&&&&&/tr&
&&&&&&/c:if&
&&&&&& &td&Remember me&/td&
&&&&&& &td&&input type=&checkbox& name=&_spring_security_remember_me& style=&border:background:&/&&/td&
&&&& &/tr&
&&&&&&&td&&&/td&
&&&&&&&td&&input type=&submit& name=&submitBtn& class=&button-64&
&&&&&&&value=&Login& /&
&&&&&&&&a href=&${ctx}/back/forgotPassword& class=&second_opt&&Forgot password?&/a&
&&&&&&&/td&
&&&&&&/tr&
&&&&&/table&
spring security的配置如下:
&?xml version=&1.0& encoding=&UTF-8&?&
&beans xmlns=&&
&xmlns:s=&& xmlns:xsi=&&
&xsi:schemaLocation=&
&&&&&&&&&&&&&&&&&&&&&&&
&&description&SpringSecurity Config&/description&
&&s:http auto-config=&true& servlet-api-provision=&false& access-denied-page=&/layout/noPrivilege.jsp&&
&&&s:intercept-url pattern=&/user/**& access=&ROLE_Authority_Admin_Base&/&
&&&s:intercept-url pattern=&/back/**& access=&ROLE_Authority_Admin_Base&/&
&&&s:intercept-url pattern=&/payment/**& access=&ROLE_Authority_Chief_Admin&/&
&&&s:intercept-url pattern=&/systemConfig& access=&ROLE_Authority_Chief_Admin&/&
&&&s:intercept-url pattern=&/appSerPack& access=&ROLE_Authority_Chief_Admin&/&
&&&s:intercept-url pattern=&/back/cltPayment& access=&ROLE_Authority_Chief_Admin&/&
&&&s:intercept-url pattern=&/user/**& access=&ROLE_Authority_Chief_Admin&/&
&&&s:intercept-url pattern=&/back/ca/**& access=&ROLE_Authority_Chief_Admin&/&
&&&s:intercept-url pattern=&/back/aa/**& access=&ROLE_Authority_Account_Admin&/&
&&&s:intercept-url pattern=&/back/dev/**& access=&ROLE_Authority_Developer&/&
&&&s:intercept-url pattern=&/back/qc/**& access=&ROLE_Authority_Quality_Checker&/&
&&&s:form-login always-use-default-target=&true&
&&&login-page=&/backLogin.jsp&
&&&default-target-url=&/login_success_by_role_redirect.jsp&&&&
&&&authentication-failure-url=&/login_failure_by_role_redirect.jsp?error=1& /&
&&&s:logout logout-success-url=&/backLogout.jsp&/&
&&&s:anonymous enabled=&true&/&
&&/s:http&
&&bean id=&userDetailsService& class=&com.infindo.framework.spring.security.UserDetailsServiceImpl& /&
&&s:authentication-manager alias=&authenticationManager&&
&&&s:authentication-provider user-service-ref=&userDetailsService&&
&&&&s:password-encoder hash=&md5& /&
&&&/s:authentication-provider&
&&/s:authentication-manager&
登陆成功后跳转到: login_success_by_role_redirect.jsp
&%@ page contentType=&text/charset=UTF-8&%&
&%@ include file=&/common/taglibs.jsp&%&
&security:authorize ifAllGranted=&ROLE_Authority_Chief_Admin&&
&&c:redirect url=&/back/caDashboard?locale=en_US&&&/c:redirect&
&/security:authorize&
&security:authorize ifAllGranted=&ROLE_Authority_Account_Admin&&
&&c:redirect url=&/back/pendingPackage?locale=en_US&&&/c:redirect&
&/security:authorize&
&security:authorize ifAllGranted=&ROLE_Authority_Quality_Checker&&
&&c:redirect url=&/back/pendingQc?locale=en_US&&&/c:redirect&
&/security:authorize&
&security:authorize ifAllGranted=&ROLE_Authority_Developer&&
&&c:redirect url=&/back/pendingNewBinary?locale=en_US&&&/c:redirect&
&/security:authorize&
&security:authorize
&ifNotGranted=&ROLE_Authority_Admin_Base, ROLE_Authority_Account_Admin, ROLE_Authority_Quality_Checker, ROLE_Authority_Developer&&
&&c:redirect url=&/backLogin.jsp&&&/c:redirect&
&/security:authorize&
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:14130次
排名:千里之外
原创:18篇
(2)(1)(4)(9)(2)(3)(1)(1)根据用户不同的权限,用spring security显示不同的菜单项。
该问题被发起重新开启投票
投票剩余时间:
之前被关闭原因:
该问题被发起删除投票
投票剩余时间:
距离悬赏到期还有:
参与关闭投票者:
关闭原因:
该问题已经被锁定
锁定原因:()
保护原因:避免来自新用户不合宜或无意义的致谢、跟帖答案。
该问题已成功删除,仅对您可见,其他人不能够查看。
不太好实现,Ext JS基本都是使用ajax异步的方法去交互。换个思路吧,在后台控制权限,然后前台部分通过便签来控制JS的输出,或者干脆在后台把数的xml按照权限组合好,传回前台
你可以考虑引入JStree组件
不是您所需,查看更多相关问题与答案
德问是一个专业的编程问答社区,请
后再提交答案
关注该问题的人
共被浏览 (3705) 次第一次使用Spring-Security ,下载了几个demo 也看了 文档, 使用最小http配置和配置测试用户 都是正常的, 就是使用数据库用户登录的时候,不知道是哪里出的问题, 求指点,感激不尽!
spring-security.xml内容:
&?xml version="1.0" encoding="UTF-8"?&
&beans:beans xmlns="http://www.springframework.org/schema/security"
xmlns:beans="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-3.0.xsd"
default-autowire="byType" default-lazy-init="true"&
&http auto-config='true'&
&intercept-url pattern="/img/**" filters="none"/& &!-- 静态资源、登陆页面不过滤, filters="none" 表示不过滤 --&
&intercept-url pattern="/js/**" filters="none"/&
&intercept-url pattern="/css/**" filters="none"/&
&intercept-url pattern="/dwz/**" filters="none"/&
&intercept-url pattern="/index.jsp*" filters="none"/&
&intercept-url pattern="/hello" filters="none"/&
&intercept-url pattern="/user/login" filters="none"/&
&intercept-url pattern="/**" access="ROLE_USER"/&
&form-login login-page='/hello' default-target-url='/user/index' always-use-default-target='true'/&
&!-- 测试用户
&authentication-manager&
&authentication-provider&
&user-service&
&user name="jimi" password="jimispassword" authorities="ROLE_USER,ROLE_ADMIN"/&
&user name="bob" password="bobspassword" authorities="ROLE_USER"/&
&/user-service&
&/authentication-provider&
&/authentication-manager&
&!-- 指定一个自定义的authentication-manager :customUserDetailsService --&
&authentication-manager&
&authentication-provider user-service-ref="customUserDetailsService"&
&password-encoder hash="plaintext"/&
&/authentication-provider&
&/authentication-manager&
&beans:bean id="customUserDetailsService" class="com.travel.spring.service.UserDetailsServiceImpl" /&
&/beans:beans&
com.travel.spring.service.UserDetailsServiceImpl& 代码:
package com.travel.spring.
import java.util.ArrayL
import java.util.C
import javax.annotation.R
import org.apache.log4j.L
import org.springframework.dao.DataAccessE
import org.springframework.security.core.GrantedA
import org.springframework.security.core.authority.GrantedAuthorityI
import org.springframework.security.core.userdetails.UserD
import org.springframework.security.core.userdetails.UserDetailsS
import org.springframework.security.core.userdetails.UsernameNotFoundE
import org.springframework.transaction.annotation.T
import com.travel.spring.model.WebU
@Transactional(readOnly = true)
public class UserDetailsServiceImpl implements UserDetailsService {
protected static Logger logger = Logger.getLogger("service");
@Resource(name = "webUserService")
private IWebUserService webUserS
public UserDetails loadUserByUsername(String username){
WebUser user = webUserService.getUserByName(username);// user已经获得 为:admin,123456,李岩
if (user == null) {
throw new UsernameNotFoundException("用户{ " + username + " }不存在!");
//Set&GrantedAuthority& grantedAuths = obtainGrantedAuthorities(user);
Collection&GrantedAuthority&grantedAuths = obtainGrantedAuthorities(user);
// -- mini-web示例中无以下属性, 暂时全部设为true. --//
boolean enabled =
boolean accountNonExpired =
boolean credentialsNonExpired =
boolean accountNonLocked =
UserDetails userdetails = new org.springframework.security.core.userdetails.User(
user.getLoginName(), user.getPassWord(), enabled,
accountNonExpired, credentialsNonExpired, accountNonLocked,
grantedAuths);
} catch (Exception e) {
// TODO: handle exception
* 获得当前User的权限('ROLE_' 开头的)
private Collection&GrantedAuthority& obtainGrantedAuthorities(WebUser user) {
Collection&GrantedAuthority& auths=new ArrayList&GrantedAuthority&();
GrantedAuthorityImpl auth2=new GrantedAuthorityImpl("ROLE_USER");
auths.add(auth2);
登陆页面代码:
&div class="panel-c-l"&
&form name="f" action="&%=path%&/j_spring_security_check" method='post'&
&table cellpadding="0" cellspacing="0"&
&td align="left" colspan="2"&
&h3&请使用Travel Manager系统账号登陆&/h3&
&td align="right"&账号:&/td&&td align="left"&&input type="text" id="j_username" name="j_username" class="login-text" /&&/td&
&td align="right"&密码:&/td&&td align="left"&&input type="password" name="j_password" class="login-text" /&&/td&
&td align="center" colspan="2"&
&input type="submit" id="btnLogin" value="登陆" class="login-btn" /&
UserController.java& 代码
package com.travel.spring.
import java.util.ArrayL
import java.util.C
import java.util.L
import java.util.S
import javax.servlet.http.HttpServletR
import javax.servlet.http.HttpS
import org.springframework.security.core.GrantedA
import org.springframework.security.core.authority.GrantedAuthorityI
import org.springframework.security.core.userdetails.UserD
import org.springframework.stereotype.C
import org.springframework.ui.M
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.RequestM
import org.springframework.web.bind.annotation.RequestP
import com.travel.spring.model.WebU
import com.travel.spring.service.IWebUserS
@Controller
@RequestMapping("/user")
public class UserController {
private IWebUserService webUserS
public IWebUserService getWebUserService() {
return webUserS
public void setWebUserService(IWebUserService webUserService) {
this.webUserService = webUserS
@RequestMapping(value="/index")
public String index(Model model,HttpServletRequest request,HttpSession session) throws Exception{
return "admin/index";
用户名 密码填写错误,还是跳转到当前页面, 如果填写正确了,就会出现 /timeout&& 404页面 ,如图
问题补充:spring3-servlet.xml& 配置:
&!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd --&
&mvc:resources mapping="/img/**" location="/img/"/&
&mvc:resources mapping="/js/**" location="/js/"/&
&mvc:resources mapping="/css/**" location="/css/"/&
&mvc:resources mapping="/dwz/**" location="/dwz/"/&
&!-- 扫描所有的controller --&
&context:component-scan base-package="com.travel.spring.web" /&
&!-- InternalResourceViewResolver默认的就是JstlView所以这里就不用配置viewClass了 --&
&bean class="org.springframework.web.servlet.view.InternalResourceViewResolver"&
&property name="prefix" value="/WEB-INF/view/"&&/property&
&property name="suffix" value=".jsp"&&/property&
问题补充:
&&& 在& Dead_knight& 的帮助下问题终于解决,这里再次感谢!
&&& 问题是:
&&& 我在spring3-sevlet.xml中配置了
&&& &!-- 启用基于注解的处理器映射,添加拦截器,类级别的处理器映射 --&
&&& &bean class="org.springframework.web.servlet.mvc.annotation.DefaultAnnotationHandlerMapping"&
&&&&&&&&&&& &property name="interceptors"&
&&&&&&&&&&&&&&& &list&
&&&&&&&&&&&&&&&&&&& &bean class="com.travel.spring.util.MyHandlerInterceptor"/&
&&&&&&&&&&&&&&& &/list&
&&&&&&&&&&& &/property&
&&&&&&&&&&
&&& &/bean&
&&& com.travel.spring.util.MyHandlerInterceptor的内容如下:
&&& package com.travel.spring.
&&& import javax.servlet.http.HttpServletR
&&& import javax.servlet.http.HttpServletR
&&& import org.springframework.web.servlet.handler.HandlerInterceptorA
&&& public class MyHandlerInterceptor extends HandlerInterceptorAdapter {
&&& @Override
&&& public boolean preHandle(HttpServletRequest request,
&&& HttpServletResponse response, Object handler) throws Exception {
&&& //就简单判断了一下,如果要详细控制可以用spring security
&&& String url = request.getRequestURI();
&&& if(url.endsWith("hello") || url.endsWith("user/login") || url.endsWith("user/login1"))
&&&
&&& if(request.getSession() != null && request.getSession().getAttribute(Constants.USER_INFO_SESSION) != null)
&&&
&&& response.sendRedirect(request.getContextPath() + "/timeout");
&&&
&&& }
&&& ,
&&& 好了,注释掉spring3-servlet.xml中的MyHandlerInterceptor& , 问题终于解决!
&&& 再次感谢 Dead_knight&
采纳的答案
去掉spring的拦截器
1、
&url-pattern&/&/url-pattern&& 这个是当所有servlet无法匹配之后去的默认的地址
因此如tomcat的默认的servlet就无法处理静态资源了
2、因此需要在spring中配置 如
&mvc:default-servlet-handler/& ---&静态资源再转发给默认servlet
+
&!-- 配置静态资源,直接映射到对应的文件夹,不被DispatcherServlet处理,3.04新增功能,需要重新设置spring-mvc-3.0.xsd --&
&mvc:resources mapping="/img/**" location="/img/"/&
&mvc:resources mapping="/js/**" location="/js/"/&
&mvc:resources mapping="/css/**" location="/css/"/&
&mvc:resources mapping="/dwz/**" location="/dwz/"/&
3、你说的spring security 很奇怪& 你第一次是怎么访问的? 访问的/timeout地址吗? 还是
404是访问的资源不存在。
public String index(Model model,HttpServletRequest request,HttpSession session) throws Exception{&
&&&&&&& return "admin/index";&
最后跳转的admin/index页面是否存在?
1.首先你得确定UserDetailsServiceImpl类中webUserService已经成功注入了
2.确定throw new UsernameNotFoundException("用户{ " + username + " }不存在!"); 是否执行了,即未找到用户
3.注意http标签的配置中,&intercept-url pattern="/**" access="ROLE_USER"/&不要这样配置,应该配置到某个路径中,不然全部都需要ROle-USER权限访问
已解决问题
未解决问题2446人阅读
Spring Security 3取不到用户信息的问题
不是&intercept-url/&惹的祸|
而是你没有真正的掌握spring sercurity3、没有真正的理解&intercept-url/&
也许你遇到过这样的问题:
1:在Servlet中使用SecurityContextHolder怎么也无法获取到用户信息.而在jsp页面里面用spring security的标签又可以取到它。
2:在Struts2的Action中使用SecurityContextHolder怎么也无法获取到用户信息.而在jsp页面里面用spring security的标签又可以取到它。
3:在Spring MVC的Control中使用SecurityContextHolder怎么也无法获取到用户信息.而在jsp页面里面用spring security的标签又可以取到它。
4:在有的action、servlet或Spring MVC的C(Control)中使用SecurityContextHolder能够获取到用户信息,而在有的action或servlet中使用SecurityContextHolder又获取不到用户信息
在你看到我的文章的时候如果你还没有解决这个问题,那么恭喜你!你很有可能将在这里找到答案。
在Java中取用户信息的代码:
你是不是同时在spring security 3的配置文件中加入了类似下面的代码:
例:applicationContext-security.xml
当你的servlet、action或Spring MVC的C(Control)相对应的url是以/mydefalut/开头,如果你要使用SecurityContextHolder获取用户信息,那么我告诉你,你想都别想。绝对是不可能的!
当你的servlet、action或Spring MVC的C相对应的url是以/admin/开头(或者其它没有没有配置filter为none的url),如果你要使用SecurityContextHolder获取用户信息,那么我想你是没有问题的。
这要从Spring Security的工作原理讲起:
Spring Security就是一个filter,如果你把Spring Security的配置文件中某个url-pattern 的filter配置为none,那么与这个url相关的请求,Spring Security是不会干活滴!
jsp中使用标签取用户名
&%@ taglib prefix=&sec& uri=&& %&
&sec:authentication property=&name&/&
纠正部分软网友的一些相关问题:
5:在Struts与Spring真正集成的环境中,使用SecurityContextHolder怎么也无法获取到用户信息.而在jsp页面里面用spring security的标签又可以取到它。有些软网友认为是因为Struts转发了请求,所以这时SecurityContextHolder清空了用户信息。
非也。真正的问题如此正文。
--软网友(搞软件的网友,转用请著明始创者:JJK)
应用标签库:&%@ taglib prefix='security' uri='http://www.springframework.org/security/tags' %&&
&security:authorize&是一个流程控制标签,能够在满足特定安全需求的条件下显示它的内容体。它有三个互斥的参数:&
ifAllGranted——是一个由逗号分隔的权限列表,用户必须拥有所有列出的权限时显示;&
ifAnyGranted——是一个由逗号分隔的权限列表,用户必须至少拥有其中的一个权限时才能显示;&
ifNotGranted——是一个由逗号分隔的权限列表,用户未拥有所有列出的权限时才能显示。&
&security:authentication&获得属性的值比如要获得用户名可以这么写:&
&security:authentication property=&principal.username&&&/security:authentication&&
他有三个属性,property是必须的,另外scope和var,var定义一个变量,scope定义var存在的范围
有时需要在页面显示用户名,或者根据用户角色显示或者不显示一些内容。这需要使用到spring security提供的标签库。
在页面中引入标签库:
&%@ taglib prefix=&sec& uri=&http://www.springframework.org/security/tags& %&
使用标签库的示例:
&sec:authentication property=&principal& var=&authentication&/&
&sec:authorize ifAllGranted=&ROLE_USER&&可以访问&/sec:authorize&
用户名:${authentication.username }&br /&
前台 ROLE_ANONYMOUS表示匿名用户
在配置文件中可以设置页面进入的权限
&intercept-url pattern=&/Homepage.*& access=&ROLE_ADMIN,IS_AUTHENTICATED_ANONYMOUSLY&/&
IS_AUTHENTICATED_ANONYMOUSLY允许匿名用户进入
IS_AUTHENTICATED_FULLY 允许登录用户进入
IS_AUTHENTICATED_REMEMBERED 允许登录用户和rememberMe用户进入
IS_AUTHENTICATED_FULLY:是则满足以下情况返回通过:
**.既不是RememberMeAuthentication也不是AnonymousAuthenticationToken的实例
IS_AUTHENTICATED_REMEMBERED:是则满足以下任一情况返回通过:
a*.Authentication是RememberMeAuthenticationToken的实例
b*.既不是RememberMeAuthentication也不是AnonymousAuthenticationToken的实例
IS_AUTHENTICATED_ANONYMOUSLY:是则满足以下任一情况返回通过:
a*.Authentication是AnonymousAuthenticationToken的实例
b*.既不是RememberMeAuthentication也不是AnonymousAuthenticationToken的实例
c*.Authentication是RememberMeAuthenticationToken的实例
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:498831次
积分:5309
积分:5309
排名:第1649名
原创:102篇
转载:233篇
评论:32条
(1)(2)(2)(2)(3)(3)(17)(23)(33)(29)(44)(8)(13)(13)(5)(16)(21)(11)(11)(17)(13)(20)(28)实现节点管理 Struts2 Spring Hibernate 实现树级菜单带添加节点与删除功能解决思路
&来源:读书人网&【读书人网():综合教育门户网站】
实现节点管理 Struts2 Spring Hibernate 实现树级菜单带添加节点与删除功能求助!我现在自己做了一个,用jqu
实现节点管理 Struts2 Spring Hibernate 实现树级菜单带添加节点与删除功能求助!我现在自己做了一个,用jquery treeview 只是显示树,在做添加与删除的时候还是没有头绪。要求无刷新页面.在线求代码实现[解决办法]额。这个求代码估计一时难的求到。不过还是帮你顶顶[解决办法]你去看看我的资源,里面有的

我要回帖

更多关于 springsecurity视频 的文章

 

随机推荐