[DELVE][web]基于angular js的Spring security验证

REQUIREMENT

现在做的项目,前台是angular js,后台是基于spring的java web。
两者是完全分离开的。身份验证是首次传入帐后密码,之后用token进行验证。

Spring security的默认配置是应用在jsp条件,前后台耦合的情况下。适用于前后分离框架的spring-security配置需要花番功夫。

stackoverflow上的一个提问
github上基于rest的spring-security配置示例工程

STEPS

之前我的项目中已经实现了spring,mybatis和aop,接下来与spring架构本身有关的配置忽略了哈,这里只讨论在原有的spring配置基础上加入spring-security。

0、引入包,通过maven添加dependency,其他引入方式见官方文档

<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-web</artifactId>
    <version>4.0.4.RELEASE</version>
</dependency>
<dependency>
    <groupId>org.springframework.security</groupId>
    <artifactId>spring-security-config</artifactId>
    <version>4.0.4.RELEASE</version>
</dependency>

1、web.xml 配置—加入filter

<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>

2、web.xml 配置—设置spring-security的配置文件路径

<!--spring-security的配置文件的路径设置必须放在这里,试了下放<servlet>下配置会报错-->
<context-param>
    <param-name>contextConfigLocation</param-name>
    <param-value>classpath:spring-security.xml</param-value>
</context-param>
<listener>
    <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>

3、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-4.0.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security-4.0.xsd">

    <http use-expressions="true" auto-config="false" entry-point-ref="CustomAuthenticationEntryPoint">
    <!-- 自定义所有返回报文的header <headers > <header name="customerHeaderName" value="customerHeaderValue"/> </headers> 对固定模式的url访问进行权限控制,url命名风格为ant <intercept-url pattern="/user/**" access="hasIpAddress('192.168.1.0/24')" /> -->
        <custom-filter ref="authenticationTokenProcessingFilter" position="PRE_AUTH_FILTER" />
    </http>

    <beans:bean id="CustomAuthenticationEntryPoint" class="com.wnlo.ams.controller.common.CustomAuthenticationEntryPoint" />

    <beans:bean id="authenticationTokenProcessingFilter" class="com.wnlo.ams.controller.common.AuthenticationTokenProcessingFilter" />

    <authentication-manager alias="authenticationManager" erase-credentials="true"/>
    <!-- 允许使用@Secured注解 -->
    <global-method-security secured-annotations="enabled">
        <!-- 对指定范围的包进行权限控制 -->
        <!-- <protect-pointcut access="" expression="execution(* com.mycompany.*Service.*(..))"/> -->
    </global-method-security>
</beans:beans>

4.spring-security.xml的配置中最重要的就是两个bean,代码贴出来太麻烦了,链接如下。
CustomAuthenticationEntryPoint
authenticationTokenProcessingFilter

5.这样就ok了,程序已经可以进行测试。
在方法上加@secured注解控制对方法的访问权限,如:@secured(“ROLE_ADMIN”)表示只有拥有ADMIN权限的用户才能访问。
用spring-security.xml中的intercept-url关键字控制对特定url的访问权限,这个上文有示例。
通过修改authenticationTokenProcessingFilter.java我们可以自定义根据客户端发送的token,赋予访问者相应的权限。
通过修改CustomAuthenticationEntryPoint.java我们可以自定权限验证未通过后的处理办法。
至此大体的用户赋权和对权限的控制框架已经搭好了,更多spring-security配置的内容可以去看官方文档,这里就不再说啦。

你可能感兴趣的:(spring,spring,Security)