บริษัท ของฉันกำลังประเมิน Spring MVC เพื่อพิจารณาว่าเราควรใช้ในโครงการต่อไปของเราหรือไม่ จนถึงตอนนี้ฉันชอบสิ่งที่ฉันเห็นและตอนนี้ฉันกำลังดูโมดูลความปลอดภัยของสปริงเพื่อตรวจสอบว่าเป็นสิ่งที่เราสามารถ / ควรใช้
ข้อกำหนดด้านความปลอดภัยของเราค่อนข้างพื้นฐาน ผู้ใช้เพียงแค่ต้องสามารถให้ชื่อผู้ใช้และรหัสผ่านเพื่อให้สามารถเข้าถึงบางส่วนของเว็บไซต์ (เช่นเพื่อรับข้อมูลเกี่ยวกับบัญชีของพวกเขา); และมีหน้าเว็บจำนวนหนึ่งบนไซต์ (คำถามที่พบบ่อยการสนับสนุน ฯลฯ ) ซึ่งผู้ใช้ที่ไม่ระบุชื่อควรได้รับสิทธิ์เข้าถึง
ในต้นแบบที่ฉันสร้างฉันได้จัดเก็บวัตถุ "LoginCredentials" (ซึ่งเพิ่งมีชื่อผู้ใช้และรหัสผ่าน) ในเซสชันสำหรับผู้ใช้ที่ได้รับการรับรองความถูกต้อง คอนโทรลเลอร์บางตัวตรวจสอบว่าวัตถุนี้อยู่ในเซสชันเพื่อรับการอ้างอิงถึงชื่อผู้ใช้ที่เข้าสู่ระบบหรือไม่ ฉันต้องการแทนที่ตรรกะที่พัฒนาขึ้นเองด้วย Spring Security แทนซึ่งจะมีประโยชน์อย่างมากในการลบ "เราจะติดตามผู้ใช้ที่เข้าสู่ระบบได้อย่างไร" และ "เราจะตรวจสอบผู้ใช้อย่างไร" จากตัวควบคุม / รหัสธุรกิจของฉัน
ดูเหมือนว่า Spring Security จะมีวัตถุ "บริบท" เพื่อให้สามารถเข้าถึงชื่อผู้ใช้ / ข้อมูลหลักจากที่ใดก็ได้ในแอปของคุณ ...
Object principal = SecurityContextHolder.getContext().getAuthentication().getPrincipal();
... ซึ่งดูเหมือนว่าจะไม่มีสปริงเหมือนวัตถุนี้เป็นซิงเกิล (ทั่วโลก) ในทางใดทางหนึ่ง
คำถามของฉันคือ: หากนี่เป็นวิธีมาตรฐานในการเข้าถึงข้อมูลเกี่ยวกับผู้ใช้ที่ได้รับการรับรองความถูกต้องใน Spring Security วิธีที่ยอมรับในการฉีดออบเจ็กต์การรับรองความถูกต้องลงใน SecurityContext เพื่อให้สามารถทดสอบหน่วยของฉันได้ ผู้ใช้รับรองความถูกต้อง?
ฉันต้องต่อสายนี้ในวิธีการเริ่มต้นของแต่ละกรณีทดสอบหรือไม่?
protected void setUp() throws Exception {
...
SecurityContextHolder.getContext().setAuthentication(
new UsernamePasswordAuthenticationToken(testUser.getLogin(), testUser.getPassword()));
...
}
ดูเหมือนว่า verbose มากเกินไป มีวิธีที่ง่ายกว่านี้ไหม?
SecurityContextHolder
วัตถุตัวเองดูเหมือนยกเลิกฤดูใบไม้ผลิเหมือนมาก ...