Spring Security 可动态授权RBAC权限模块实践

本文介绍了如何在Spring项目中实现Spring Security的动态授权RBAC权限模块。首先,需要在web.xml中配置过滤器,确保其在Struts过滤器之前。接着,配置Spring Security的applicationContext-security.xml,将它加入Spring的上下文解析路径。Spring Security负责认证和授权两个核心功能。认证部分在特定配置中进行,而授权默认通过FILTER_SECURITY_INTERCEPTOR。若要自定义授权,可以额外添加自定义拦截器到HTTP请求处理链中。
摘要由CSDN通过智能技术生成

先在web.xml 中配置一个过滤器(必须在Struts的过滤器之前)

<filter>
	<filter-name>springSecurityFilterChain</filter-name>
	<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
	<filter-name>springSecurityFilterChain</filter-name>
	<url-pattern>/*</url-pattern>
</filter-mapping>

然后就是编写Spring安全的配置文件applicationContext-security.xml并配置到Spring解析的路径下


Spring Security主要做两件事,一件是认证,一件是授权。


认证

当用户访问受保护的信息却没有登录获得认证时,框架会自动将请求跳转到登录页面


在http标签中的
<form-login login-page="/page/login.jsp" />

配置。且该登录页面必须是不被拦截的。故要配置上
<intercept-url pattern="/page/login.jsp" filters="none" />


Web项目的认证如果在HTTP标签中配置了auto-config="true",框架就会自动的配置多8?个拦截器。 默认表单登录认证的是FORM_LOGIN_FILTER拦截器,我们可以直接写自定义的UserDetailsService,在这个类中实现方法UserDetails loadUserByUsername(String username),从数据库获取用户信息,以及其拥有的角色。
@Service("myUserDetailsService")
public class MyUserDetailsServiceImpl extends BaseService implements UserDetailsService {
@Resource
private UserDao userDao;


public UserDetails loadUserByUsername(String username)
throws UsernameNotFoundException, DataAccessException {

User user = userDao.getUserByUsername(username);
List<Role> roles = user.getRoles();
Collection<GrantedAuthority> authorities = new LinkedList<GrantedAuthority>();

for (Role role : roles) {
authorities.add(new GrantedAuthorityImpl(role.getCode()));
}

UserDetails userDetails = new org.springframework.security.core.userdetails.User(username,user.getPassword(),Constants.STATE_VALID.equals(user.getState()),true,true,true,authorities);

return userDetails;
}


}

配置在

<authentication-manager alias="myAuthenticationManager">
	<authentication-provider user-service-ref="myUserDetailsService">
		<password-encoder hash="md5" />
	</authentication-provider>
</authentication-manager>

如果需要在登录的时候,在HTTP SESSION中配置做些操作的。就得配置自定义的FORM_LOGIN_FILTER了

在HTTP标签中加入
<custom-filter ref="loginFilter" before="FORM_LOGIN_FILTER" />

并配置
<!-- 访问控制验证器Authority -->
<beans:bean id="securityFilter"
class="org.springframework.security.web.access.intercept.FilterSecurityInterceptor">
<beans:property n
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值