首页 > 代码库 > Spring Security3.1实践
Spring Security3.1实践
收拾材料,收拾思路
3.1.Spring Security3.1的2种常见号码大全办法
Ø 用户信息和权限存储于数据库,而资本和权限的对应选用硬关键词挖掘工具编码装备。
Ø 细分角色和权限,并将角色、用户、资本、权限均都存储于数据库中。而且自定义过滤器,替代本来的FilterSecurityInterceptor过滤器;并分别完成AccessDecisionManager、UserDetailsService和InvocationSecurityMetadataSourceService,并在装备文件中进行相应装备。
Ø发现两者不可联系运用,会有疑问。
代码收拾
接下来开端着手代码编写,不管是两种完成办法中的哪种办法,个人感觉都需要把加载用户信息放在一个类里面办理,直观便利,构造明晰,不要用在装备文件直接写sql句子。
资本和权限对应写在装备文件中
1、 web.xml装备
a) 启动时加载Spring的jdbc和security装备文件。
b) 装备spring的servlet过滤器,使其能够辨认Spring Controller。
c) 加载Spring Security过滤器链署理,它依照次序履行spring的权限过滤器。
d) 其他业务加载,比方:log4j,字符集编码过滤器,session超时等。
Xml代码 保藏代码
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
webAppRootKey
springMvc
org.springframework.web.util.Log4jConfigListener
contextConfigLocation
classpath:/module/applicationContext-jdbc.xml,
classpath:/module/applicationContext-security.xml
log4jConfigLocation
classpath:/config/log4j.properties
org.springframework.web.context.ContextLoaderListener
springSecurityFilterChain
org.springframework.web.filter.DelegatingFilterProxy
springSecurityFilterChain
- indexRead arguments from command-line "http://www.3h5.cn"
- indexRead arguments from command-line "http://www.shoudashou.com"
- indexRead arguments from command-line "http://www.4lunwen.cn"
- indexRead arguments from command-line "http://www.zx1234.cn"
- indexRead arguments from command-line "http://www.penbar.cn"
- indexRead arguments from command-line "http://www.lunjin.net"
- indexRead arguments from command-line "http://www.ssstyle.cn"
- indexRead arguments from command-line "http://www.91fish.cn"
/*
springmvc
org.springframework.web.servlet.DispatcherServlet
contextConfigLocation
classpath:/module/applicationContext-servlet.xml
1
springmvc
/
org.springframework.web.util.IntrospectorCleanupListener
org.springframework.security.web.session.HttpSessionEventPublisher
20
encodingFilter
org.springframework.web.filter.CharacterEncodingFilter
encodingFilter
/*
index.jsp
2、 application-security.xml文件的装备。application-servlet.xml装备不明白的参阅spring MVC3.0.5建立全程。
Xml代码 保藏代码
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.1.xsd">
use-expressions="true"
access-denied-page="/user/denied">
always-use-default-target="true"
authentication-failure-url="/user/login?error=1"
login-processing-url="/logincheck"
authentication-success-handler-ref="successHandler"/>
疑问:
我自个写了个User完成UserDetails,发现同一个账号能够一起登入,也即是说concurrency-control没有起到作用,参阅了一下材料后,重写一下User的hashcode,equals办法就行了。【后来发现的疑问,附件自个增加】
具体参阅:http://flashing.iteye.com/blog/823666
Java代码 保藏代码
@Override
public int hashCode() {
return username.hashCode();
}
@Override
public boolean equals(Object obj) {
User user = (User)obj;
return this.username.equals(user.getUsername());
}
解析:
a、use-expressions
如:hasRole(‘ROLE_ADMIN’或hasIpAddress(‘127.0.0.1’))等,看不明白的能够参阅下面连接。
http://static.springsource.org/spring-security/site/docs/3.0.7.RELEASE/reference/el-access.html
http://hougbin.iteye.com/blog/1526980
http://kongcodecenter.iteye.com/blog/1320021
b、
其特点hash即是加密的办法是什么?常用的可能是md5和sha吧。
首要说下盐值:不加这个特点,spring验证暗码时,直接用MD5加密后的值,与我们自个写的完成了UserDetailsService接口的类中loadUsersByUsername(String username)办法回来的UserDetails中的暗码进行对比;假如加了这个特点而且设置user-property=’username’[不知道能不能设置其他值,或许也能够设置password,没有尝试],加密前的明文就成为”暗码明文{盐值}”,这里的盐值为用户名。
c、remember-me的完成战略参阅下面:
http://static.springsource.org/spring-security/site/docs/3.0.x/reference/remember-me.html
http://blog.csdn.net/small_love/article/details/6641316
http://xyz20003.iteye.com/blog/223282
d、UserDetailsService能够通过手艺设置几个用户的权限: