首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

小弟我的SpringSecurity实践

2012-06-28 
我的SpringSecurity实践我的SpringSecurity实践(一) 数据库与实体类设计(mysql)虽然SpringSecurity框架提

我的SpringSecurity实践
我的SpringSecurity实践

(一) 数据库与实体类设计(mysql)


虽然SpringSecurity框架提供的接口很多,真正要亲自实现的不多三个而已
org.springframework.security.core.GrantedAuthorityorg.springframework.security.core.userdetails.UserDetailsorg.springframework.security.core.userdetails.UserDetailsService

(三) 编写Spring Security 配置文件
尽管SpringSecurity提供了<http>元素来简化配置,简化过后有相当多的细节被隐藏起来了。
有时候想改变一下框架的默认行为十分不便。我还是用传统的Bean方式。
这样虽然麻烦,但是掌握之后,一旦看哪个bean不顺眼就可以方便的取而代之。强大灵活!

3.0 xml的schema, 因为是用bean的方式配置嘛,默认命名空间当然是用beans方便。


3.1 web项目部署描述


3.3 channelProcessingFilter: 常用来将某些HTTP协议的URL重定向到HTTPS协议


3.4 concurrencyFilter:HttpSession并发过滤器


3.5 securityContextPersistenceFilter:获取或存储一个SecurityContext


3.6 logoutFilter:监控一个实现退出功能的URL

这个bean没有没有默认构造方法。

3.7 usernamePasswordProcessingFilter:处理用户登录请求


3.8 rememberMeProcessingFilter: 实现"记住我"功能

被我注释掉的jdbcRememberMeTokenRepository需要一个数据库表
这个表用来持久化RememberMeToken,生产环境一般还是要这样做的。


3.10 exceptionTranslationFilter: 验证通不过?没有访问权限?这个Filter决定如果出现异常了到底应该这么办。


3.11 filterSecurityInterceptor:核心过滤器的最后一个。它完成最终的授权判断
下面的配置有点多,那是因为filterSecurityInterceptor是个懒家伙。
它把工作委托AuthenticationManager接口,AuthenticationManager接口也不真的干活,
它委托多个AuthenticationProvider接口,当然其中一个AuthenticationProvider还是要
把工作委托给我们的UserDetailsService实现的。最后投票决定到最终结果。


3.12 其他的工具bean


(四) How to
4.1 在MVC框架里,我该如何得到现在已经登录的用户?


以上的配置只是例子而已。

你可以这样的


hasRole是一个SpEL的函数名,个人也感觉它起名字有问题,这个函数实际上是根据
GrantedAuthority接口来判断。而跟我们定义的Role或者Permission没有直接关系。

以上的配置只是例子而已。

你可以这样的


hasRole是一个SpEL的函数名,个人也感觉它起名字有问题,这个函数实际上是根据
GrantedAuthority接口来判断。而跟我们定义的Role或者Permission没有直接关系。

请问<security:intercept-url pattern="/**" access="hasRole('PERMISSION_CAN_DO_SOMETHING')" />
PERMISSION_CAN_DO_SOMETHING是表达什么意思?写死在这里吗?

页面标签<sec:authorize url="/add*">不好使,看官方文档说在应用程序上下文必须有webapplicationContext实例,才能用 google上查不到 请帮忙解答,非常感谢!

以上的配置只是例子而已。

你可以这样的


hasRole是一个SpEL的函数名,个人也感觉它起名字有问题,这个函数实际上是根据
GrantedAuthority接口来判断。而跟我们定义的Role或者Permission没有直接关系。

请问<security:intercept-url pattern="/**" access="hasRole('PERMISSION_CAN_DO_SOMETHING')" />
PERMISSION_CAN_DO_SOMETHING是表达什么意思?写死在这里吗?

页面标签<sec:authorize url="/add*">不好使,看官方文档说在应用程序上下文必须有webapplicationContext实例,才能用 google上查不到 请帮忙解答,非常感谢!

你好。
"PERMISSION_CAN_DO_SOMETHING"就是"GrantedAuthority"接口的"generateGrantedAuthority()"方法的返回值,我是用Hibernate实现的UserDetailsService从数据库里把这个字符串取出来。

这个字符串就是一个用户有没有某种权限判断的依据。

<sec:authorize url="/add*">我也没有用过。

以上的配置只是例子而已。

你可以这样的


hasRole是一个SpEL的函数名,个人也感觉它起名字有问题,这个函数实际上是根据
GrantedAuthority接口来判断。而跟我们定义的Role或者Permission没有直接关系。

请问<security:intercept-url pattern="/**" access="hasRole('PERMISSION_CAN_DO_SOMETHING')" />
PERMISSION_CAN_DO_SOMETHING是表达什么意思?写死在这里吗?

页面标签<sec:authorize url="/add*">不好使,看官方文档说在应用程序上下文必须有webapplicationContext实例,才能用 google上查不到 请帮忙解答,非常感谢!

你好。
"PERMISSION_CAN_DO_SOMETHING"就是"GrantedAuthority"接口的"generateGrantedAuthority()"方法的返回值,我是用Hibernate实现的UserDetailsService从数据库里把这个字符串取出来。

这个字符串就是一个用户有没有某种权限判断的依据。

<sec:authorize url="/add*">我也没有用过。

我现在是把资源url写在DB中,配置文件中不需要
也是自定义的filter
使用ss3提供的JSP标签,<sec:authorize 来控制页面上显示的内容,请问您是怎么做到的? 7 楼 yingzhor 2012-05-10   我就是用的这个呀。

<sec:authorize access="hasRole('ROLE_ADMIN')">
这段文本只有管理员可见
</sec:authorize>

如果登录的用户有管理员的角色的话,中间的文本他就可以看见了。
8 楼 leon.s.kennedy 2012-05-10   yingzhor 写道我就是用的这个呀。

<sec:authorize access="hasRole('ROLE_ADMIN')">
这段文本只有管理员可见
</sec:authorize>

如果登录的用户有管理员的角色的话,中间的文本他就可以看见了。


那您就把ROLE_ADMIN角色写死在jsp中
ROLE_ADMIN角色删除不了
如果其他角色想访问该资源,还得改源码
小弟糊涂,还望大·侠指点!
方便的话加我qq459109544
谢谢

热点排行