springsecurity3.0

最近不忙了,将自己做过的一些东西写到博客上以防忘记
网站的权限管理部分采用了springsecurity3
第一步在pom.xml中加入以下代码
<!-- spring security -->

<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-core</artifactId>
<version>3.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-config</artifactId>
<version>3.0.2.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-taglibs</artifactId>
<version>3.0.2.RELEASE</version>
</dependency>

<dependency>
<groupId>com.google.collections</groupId>
<artifactId>google-collections</artifactId>
<version>1.0</version>
</dependency>


第二步:新建applicationContext-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="byName">

<http auto-config="true" access-denied-page="/accessDenied.jsp" ><!-- 当访问被拒绝时,会转到403.jsp -->
<intercept-url pattern="" filters="none" />
<intercept-url pattern="/logout/logout.action" filters="none" />
<intercept-url pattern="/login.jsp" filters="none" />
<intercept-url pattern="/css/**" filters="none" />
<intercept-url pattern="/images/**" filters="none" />
<intercept-url pattern="/layout/**" filters="none" />
<intercept-url pattern="/js/**" filters="none" />
<intercept-url pattern="/style/**" filters="none" />
<intercept-url pattern="/baike_editor/**" filters="none" />
<intercept-url pattern="/commen/**" filters="none" />
<intercept-url pattern="/datepicker/**" filters="none" />

<form-login login-page="/login.jsp"
authentication-failure-url="/login.jsp?error=true"
default-target-url="/index.jsp" />
<logout logout-success-url="/login.jsp" />
<http-basic />
<!-- 增加一个filter,这点与Acegi是不一样的,不能修改默认的filter了,这个filter位于FILTER_SECURITY_INTERCEPTOR之前 -->
<custom-filter before="FILTER_SECURITY_INTERCEPTOR" ref="myFilter" />
<custom-filter after="PRE_AUTH_FILTER" ref="mycookiesfilter"/>
</http>

<!-- 一个自定义的filter,必须包含authenticationManager,accessDecisionManager,securityMetadataSource三个属性,
我们的所有控制将在这三个类中实现,解释详见具体配置 -->
<beans:bean id="myFilter" class="com.specl.mis.login.filter.MyFilterSecurityInterceptor">

</beans:bean>

<!-- 认证管理器,实现用户认证的入口,主要实现UserDetailsService接口即可 -->
<authentication-manager alias="authenticationManager">
<authentication-provider user-service-ref="myUserDetailService">
<!--密码采用MD5加密 当然security也提供了盐值加密-->
<password-encoder hash="md5" />
</authentication-provider>
</authentication-manager>
<beans:bean id="myUserDetailService"
class="********" >
</beans:bean>

<!-- 访问决策器,决定某个用户具有的角色,是否有足够的权限去访问某个资源 -->
<beans:bean id="accessDecisionManager"
class="*****">
</beans:bean>

<!-- 资源源数据定义,即定义某一资源可以被哪些角色访问 -->
<beans:bean id="securityMetadataSource"
class="*****" />

<!--自定义username password 过滤器-->

<beans:bean id="authenticationProcessingFilter"
class="******">
</beans:bean>


<!--增加自定义的cookies过滤器-->
<beans:bean id="mycookiesfilter"
class="*******">
</beans:bean>

</beans:beans>


下面分析springsecurity的执行原理
从登陆开始
1、登陆--->2、根据用户名查询(注意只是根据用户名查询)--->3、验证密码(假设密码对)-->4、获取你要访问的url---->5、查找访问此url资源需要的权限------>6、用当前登录用户拥有的权限去和访问url资源需要的权限对比------>7、当前用户有该权限(登陆成功)否则登陆失败
ok有了这个思路后我们就开始将此汉语转成java
[b][color=red]登陆[/color][/b]
学过springsecurity的都知道该怎么写 很简单

<form id="form1" name="form1" method="post" action="${pageContext.request.contextPath}/j_spring_security_check">
<ul class="login_label input_bg1">

<li><label>登录名:</label><input type='text' id='j_username' name='j_username' class="required" /></li>
<li><label>密码:</label><input type='password' id='j_password' name='j_password' class="required" /></li>
<li><label>验证码:</label><input type="text" name="j_code" class="required put1" id="imagecode" autocomplete="off"/span id="code"></span></li>
</ul>
<p class="align3a"><span class="input_bg2"><input type="submit" name="button" id="button" value="登 录" /></span></p>
</form>



注意用户名和密码的name是固定的分别为j_username和但是验证码怎么加呢?一般的网站登陆可都是需要验证码的这个问题先留着
ok表单写好了 该提交登陆了
按照上面的流程应该到---按用户名进行查询
注意这个查询不是你想写到哪就写到哪的 我们必须写一个类该类需要实现UserDetailsServiceImpl接口

public UserDetails loadUserByUsername(String loginname) throws UsernameNotFoundException, DataAccessException {
}


该方法里面loginname就是你填写的登录名该参数不需要你传值,此方法返回一个对象UserDetails该对象是springSecurity提供的一个抽象类需要我们继承

public class MyUserDetails extends Operator implements UserDetails, Serializable {
public Collection<GrantedAuthority> getAuthorities() {
}
return null;
}
}


这个类干什么的呢 ?
注意在这个类中有一个方法getAuthorities此方法中我们需要获取登录用户拥有的权限然后一个集合


今天先写到这
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值