后端代码
spring-security.xml配置文件
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:security="http://www.springframework.org/schema/security"
xmlns:context="http://www.springframework.org/schema/context"
xmlns:mvc="http://www.springframework.org/schema/mvc"
xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/security http://www.springframework.org/schema/security/spring-security.xsd http://www.springframework.org/schema/context https://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc https://www.springframework.org/schema/mvc/spring-mvc.xsd">
<security:global-method-security pre-post-annotations="enabled" />
<security:http security="none" pattern="/js/**" />
<security:http security="none" pattern="/css/**" />
<security:http pattern="/login.html" security="none"/>
<security:http pattern="/fail.html" security="none"/>
<security:http auto-config="true" use-expressions="true">
<security:intercept-url pattern="/**" access="isAuthenticated()" />
<security:form-login
login-page="/login.html"
login-processing-url="/login"
username-parameter="abc"
password-parameter="bbb"
authentication-failure-url="/fail.html"
default-target-url="/index.html"
always-use-default-target="true"
/>
<security:csrf disabled="true"/>
<security:logout logout-url="/logout"
logout-success-url="/login.html" invalidate-session="true"/>
</security:http>
<security:authentication-manager>
<security:authentication-provider user-service-ref="userService">
<security:password-encoder ref="encoder"/>
</security:authentication-provider>
</security:authentication-manager>
<bean id="encoder" class="org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder"/>
<bean id="userService" class="com.heima.service.UserService"/>
</beans>
Controller层
@Controller
@RequestMapping
public class UserController {
@RequestMapping("/add")
@PreAuthorize("hasAuthority('add')")
public String add(){
System.out.println("add...");
return "/success";
}
@RequestMapping("/update")
@PreAuthorize("hasRole('ROLE_ADMIN')")
public String update(){
System.out.println("update...");
return "/success";
}
@RequestMapping("/delete")
@PreAuthorize("hasRole('ABC')")
public String delete(){
System.out.println("delete...");
return "/success";
}
}
前端页面
注意:以下操作的必须是在jsp文件中。
在前端页面顶部添加如下:
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
<%@ taglib prefix="security" uri="http://www.springframework.org/security/tags"%>
获取当前用户
当前用户:<FONT color="red"> <security:authentication property="principal.username"/> </FONT>
设置访问权限
只有ROLE_ADMIN角色才能访问
<security:authorize access="hasRole('ROLE_ADMIN')">
<TD class=menuSmall>-用户管理</TD>
</security:authorize>
<security:authorize>标签的使用方法
<security:authorize>是一个流程控制标签,能够在满足特定安全需求的条件下显示它的内容体。它有三个互斥的参数:
ifAllGranted——是一个由逗号分隔的权限列表,用户必须拥有所有列出的权限时显示;
ifAnyGranted——是一个由逗号分隔的权限列表,用户必须至少拥有其中的一个权限时才能显示;
ifNotGranted——是一个由逗号分隔的权限列表,用户未拥有所有列出的权限时才能显示。
<security:authentication>获得属性的值
比如要获得用户名可以这么写:
<security:authentication property="principal.username"></security:authentication>
他有三个属性,property是必须的,另外scope和var,var定义一个变量,scope定义var存在的范围
例子:
有时需要在页面显示用户名,或者根据用户角色显示或者不显示一些内容。这需要使用到spring security提供的标签库。
在页面中引入标签库:
使用jstl表达式
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>